Могу ли я использовать оператор IF в GridView ItemTemplate? - PullRequest
9 голосов
/ 15 апреля 2011

У меня есть простой шаблон элемента gridview, который выглядит так:

<asp:TemplateField HeaderText="User">
   <ItemTemplate>
      <a href="mailto:<%# Eval("Email") %>"><%# Eval("Name") %></a>
   </ItemTemplate>
</asp:TemplateField>

Однако не все пользователи в этом списке хранят электронные письма в системе, что означает, что Eval («Электронная почта») иногда возвращает пустое значение. Когда это произойдет, я бы предпочел не иметь ссылки на поле, так как mailto не будет работать без адреса электронной почты.

Как я могу это сделать? Я надеялся, что смогу использовать оператор IF в коде представления вроде того, как работал классический ASP. Если нет, то я полагаю, что мог бы создать свойство в моем источнике данных, которое включает в себя весь HTML HREF ...

Ответы [ 5 ]

14 голосов
/ 15 апреля 2011

Вместо Eval вы можете использовать любую заданную публичную функцию. Поэтому вы можете попытаться сделать что-то вроде следующего:

<ItemTemplate>
    <%# (String.IsNullOrEmpty(Eval("Email").ToString()) ? String.Empty : String.Format("<a href='mailto:{0}'>{1}</a>", Eval("Email"), Eval("Name")) %>
</ItemTemplate>

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

2 голосов
/ 15 апреля 2011

Это должно работать:

<a <%# String.IsNullOrEmpty(EMail) ? String.Empty : "href=mailto:Eval('Email')" %> ><%# Eval("Name") %></a>
1 голос
/ 19 июля 2019

C # .NET используйте следующий код

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
    <asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="50" />
    <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
    <asp:TemplateField HeaderText="Status" ItemStyle-Width="100">
        <ItemTemplate>
            <asp:Label Text='<%# Eval("Status").ToString() == "A" ? "Absent" : "Present" %>'
                runat="server" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

VB.NET используйте следующий код

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
    <asp:BoundField DataField="Id" HeaderText="Id" ItemStyle-Width="50" />
    <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />
    <asp:TemplateField HeaderText="Status" ItemStyle-Width="100">
        <ItemTemplate>
            <asp:Label Text='<%# If(Eval("Status").ToString() = "A", "Absent", "Present") %>'
                runat="server" />
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

0 голосов
/ 30 января 2018

Вы можете использовать событие OnRowDataBound или, если хотите, использовать глобальную переменную, потому что Binding является последовательным

как это

public int myvar;

public void SetMyVar(int i) {
    myvar = i
}

и в виде сетки

<%# SetMyVar(DataBinder.Eval(Container.DataItem, "Day")) %>
<% if (myvar == 0) { %>
      <%# Eval("Day") %>
<% } else { %>
     <asp:HyperLink ID="hplDay" runat="server" NavigateUrl="" Target="_blank" Text='<%# Eval("Day") %>' />                                
<% } %>   
0 голосов
/ 15 декабря 2016
<ItemTemplate>
    <%# Eval("Type").ToString() == "2" ? "Page" : "Blog" %>
</ItemTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...