ASP.NET GridView ItemTemplate - PullRequest
       5

ASP.NET GridView ItemTemplate

2 голосов
/ 26 августа 2009

ОК. У меня есть GridView, и есть столбец, в котором я хочу быть ссылкой, если файл существует, в противном случае я просто хочу, чтобы он был меткой. Прямо сейчас я изменяю элементы управления в обработчике событий RowDataBound, используя строку, переданную в аргументах. Я не большой поклонник этого, поскольку я жестко кодирую идентификатор столбца, и если он когда-либо изменится, мне нужно будет помнить, чтобы изменить этот код. Я надеялся, что смогу сделать условное выражение в коде asp, чтобы добавить ссылку, если значение свойства не равно нулю, иначе добавить метку. Это возможно? Есть разные решения?

Я бы хотел что-то вроде этого:

<asp:TemplateField HeaderText="Status">
   <ItemTemplate>
    <%# if (Eval("LogFileName") == null)
    <%#{ 
          <asp:LinkButton ID="LogFileLink" runat="server" CommandArgument='<% #Eval("LogFileName") %>' CommandName="DownloadLogFile" Text='<%# Blah.NDQA.Core.Utilities.GetEnumerationDescription(typeof(Blah.NDQA.Core.BatchStatus), Eval("Status")) %>'>
    <%# }
    <%# else
    <%#{
          <asp:Label ID="LogFileLabel" runat="server"Text='<%# Blah.NDQA.Core.Utilities.GetEnumerationDescription(typeof(Blah.NDQA.Core.BatchStatus), Eval("Status")) %>'>
          </asp:Label>
    </ItemTemplate>
</asp:TemplateField>

Ответы [ 4 ]

3 голосов
/ 16 апреля 2010

Я знаю, что это уже немного устарело, но на тот случай, если кто-то еще наткнется на это, как я, когда искал ответ на похожий вопрос, я обнаружил, что вы можете сделать что-то вроде этого:

<ItemTemplate>                      
    <asp:ImageButton ID="btnDownload" runat="server"
     CommandName="Download"
     CommandArgument='<%# Eval("Document_ID") & "," & Eval("Document_Name") %>'
     ImageUrl="download.png" ToolTip='<%#"Download " & Eval("Document_Name") %>'
     Visible='<%# Not(Eval("Document_ID") = -1) %>' />
</ItemTemplate>

т.е. установите свойство Visible для оценки логического выражения на основе вашего поля. Если вы хотите отобразить что-то вместо ссылки на скачивание или кнопку, например ярлык «Недоступно», вам просто нужно установить для свойства Visible противоположное логическое выражение для ссылки на скачивание. (Это VB.NET, а не C #, но вы поняли.)

3 голосов
/ 26 августа 2009

Вы можете продолжать использовать событие RowDataBound, но в своем aspx вы добавляете:

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

В вашем коде C # что-то вроде этого:

if (LogFileName) {
  LinkButton ctrl = new LinkButton();
  ctrl.CommandArgument= ...;
  ctrl.CommandName= ...;
} else {
  Label ctrl = new Label();
  ctrl.Text= ...;
}

// You have to find the PlaceHolder1
PlaceHolder1.Controls.Add(ctrl);

Таким образом, вам не нужно жестко кодировать идентификатор столбца

2 голосов
/ 26 августа 2009

Если вы собираетесь много заниматься этим, я предлагаю написать собственное поле.Самый простой подход, вероятно, состоит в том, чтобы создать NullableHyperlinkField, унаследованный от HyperlinkField, и вывести простую строку, если URL-адрес привязки в противном случае будет нулевым.

2 голосов
/ 26 августа 2009

Используйте свойства на странице, чтобы определить, хотите ли вы показать метку или ссылку

<asp:GridView ID="gv" runat="server">
        <Columns>
            <asp:TemplateField HeaderText="Status">
                <ItemTemplate>
                    <asp:LinkButton runat="server" Visible='<%# ShowLink %>' PostBackUrl="~/Aliases.aspx" >This is the link</asp:LinkButton>
                    <asp:Label runat="server" Visible='<%# ShowLabel %>'>Aliases label</asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

Добавление свойств ShowLink и ShowLable для вашего кода

public bool ShowLabel
    {
        get
        {
            //determine if the label should be shown
            return false;
        }
        private set
        {
            //do nothing
        }
    }
    public bool ShowLink
    {
        get
        {
            //determine if the link should be shown
            return true;
        }
        private set
        {
            //do nothing
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...