Как я могу сделать предложение If в моем ASP.NET ListView?

У меня есть приложение ASP.NET с ListView. ListView получает данные из DataTable, и я хочу, чтобы мой ListView создавал шаблон элемента, чтобы у меня было предложение if для изменения изображения внутри.

Например:

В моем DataTable есть столбец с именем Enable. Может иметь два значения. Первое значение равно 0, а второе 1. Если в моих столбцах значение 0, я хочу a.png, а если у меня есть 1 другое изображение в моем элементе управления asp:image (в моем представлении списка).

Вот мой aspx-сайт:

...

   <ItemTemplate>
        <tr onmouseover="this.style.backgroundColor='#87CEFA'"
        onmouseout="this.style.backgroundColor='#ffffff'">
            <td align="left"><span class="spanpading"><asp:Label ID="lblname" Text='<%# Eval("NAME") %>' runat="server"  /></span></td>
            <td align="left"><span class="spanpading"><asp:Label ID="lblcompany" Text='<%# Eval("COMPANY") %>' runat="server"  /></span></td>
            <td align="left"><span class="spanpading"><asp:Label ID="lblVon" Text='<%# Eval("TIMEFROM") %>' runat="server"  /></span></td>
            <td align="left"><span class="spanpading"><asp:Label ID="lblBis" Text='<%# Eval("TIMETO") %>' runat="server"  /></span></td>
            <td align="left"><span class="spanpading"><asp:Label ID="lblErsteller" Text='<%# Eval("CREATOR") %>' runat="server"  /></span></td>
            <td align="left"><asp:ImageButton ID="imgDelete" runat="server" ToolTip="löschen" ImageUrl="images/delete.gif" CommandName="DeleteClick" CommandArgument='<%# Container.DataItemIndex %>' /></td>
            <td align="left"><asp:ImageButton ID="imgUpdate" runat="server" ToolTip="ändern" ImageUrl="images/edit.gif" CommandName="UpdateClick" CommandArgument='<%# Container.DataItemIndex %>' /></td>
            <td align="left"><asp:ImageButton ID="imgEmail" runat="server" ToolTip="Zugangsdaten senden" ImageUrl="images/send.gif" CommandName="SendClick" CommandArgument='<%# Container.DataItemIndex %>' /></td>
           <% if ()
              { %>

             <td align="left"><asp:Image ID="imgActive" runat="server" ToolTip="Aktiv" Width="25px" Height="25px" ImageUrl="images/yes.gif"/></td>

             <% } %>

            <td><asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' Visible="False" ></asp:Label></td>
        </tr>
    </ItemTemplate>

...


person Tarasov    schedule 04.12.2012    source источник


Ответы (3)


Вы можете использовать блочный элемент, например, например. <span>, запустите его на сервере и переключите его видимость на основе элемента привязки данных.

E.g.:

<span runat="server" Visible='<%# Eval("IsConditionTrue") %>'>
    <!-- ... Place your conditionally visible tags here inside ... -->
</span>

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

<span runat="server" 
      Visible='<%# (int)Eval("SomeValue")==1 && (bool)Eval("SomeOtherValue") %>'>
    <!-- ... Place your conditionally visible tags here inside ... -->
</span>

Наконец, чтобы перейти к вашему конкретному примеру, я думаю, вы могли бы сделать что-то вроде:

<span runat="server" Visible='<%# (int)Eval("Enable")==1 %>'>
    <asp:Image ImageUrl="images/yes.gif" />
</span>
<span runat="server" Visible='<%# (int)Eval("Enable")!=1 %>'>
    <asp:Image ImageUrl="images/no.gif" />
</span>

Конечно, Mhd. Ответ Яссена кажется самым коротким для вашего случая:

<asp:Image ImageUrl='<%# (int)Eval("Enable")==1 ? "yes.gif" : "no.gif" %>' />

Обратите внимание, что вам нужно добавить дополнительные атрибуты, такие как runat="server", к вашему тегу Image, как и в исходном вопросе. Я опустил их для удобства чтения в моем коде выше.

person Uwe Keim    schedule 04.12.2012
comment
это правильный путь, я не получаю сообщения об ошибке, но я не вижу изображения... мои изображения находятся в папке с именем изображения... это важно? - person Tarasov; 04.12.2012
comment
@Тарасов Конечно. Вы можете попробовать "~/images/yes.gif" (обратите внимание на ~ в начале). - person Uwe Keim; 04.12.2012
comment
@Tarasov Да, я опустил это для ясности :-) Обновлю свой ответ. - person Uwe Keim; 04.12.2012

if(((YourDataTable) Container.DataItem).Enable){
}

поэтому вы можете сделать:

<% if (((YourDataTable) Container.DataItem).Enable)
      { %>

          <td align="left"><asp:Image ID="imgActive" runat="server" ToolTip="Aktiv" Width="25px" Height="25px" ImageUrl="images/yes.gif"/></td>

     <% } %>
person Massimiliano Peluso    schedule 04.12.2012
comment
Я не могу использовать container.DataItem - person Tarasov; 04.12.2012

Я думаю, что вместо того, чтобы делать это в файле .aspx, вы должны обрабатывать ListView.ItemDataBound Event.

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
    {

        if (e.Item.ItemType == ListViewItemType.DataItem)
        {

            Image imgActive = (Image)e.Item.FindControl("imgActive");
            System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;
            string value = rowView["Enable"].ToString();
            if (value == "1")
            {
                imgActive.ImageUrl="~/images/imageA.gif"; 
            }
            else
            {
                imgActive.ImageUrl="~/images/imageB.gif"; 
            }
        }
    }
person Kapil Khandelwal    schedule 04.12.2012