Как скрыть элемент в списке данных - PullRequest
2 голосов
/ 22 февраля 2012

Я хочу скрыть элемент в datalist в соответствии с каким-либо условием, предъявив иск ItemBound, как?

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Оберните PlaceHolder элемент управления вокруг всего содержимого ItemTemplate.

Затем в вашем событии ItemDataBound вы можете сделать что-то вроде:

Protected Sub myDataList_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles myDataList.ItemDataBound
    If Not Value = Value2 Then
       Ctype(e.Item.FindControl("myPlaceHolder"), PlaceHolder).Visible = False
    End If
End Sub

Aлучший подход (однако у меня не было возможности протестировать его) - скрыть весь элемент, используя e.Item.Visible.Таким образом, элементы HTML не будут отображаться для элемента.Это также означало бы, что PlaceHolder не нужно будет добавлять.

Protected Sub myDataList_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles myDataList.ItemDataBound
    If Not Value = Value2 Then
       e.Item.Visible = False
    End If
End Sub

В качестве альтернативы, если проверяемые значения взяты из источника базы данных, вы можете отфильтровать элементы перед привязкой:

WHERE Value=@Value2
0 голосов
/ 22 февраля 2012

Простым решением может быть установка видимости вашего контейнера Item путем оценки желаемого состояния в вашем ItemTemplate:

<ItemTemplate>
    <div id="itemdiv" visible='<%# (Convert.ToInt32(Eval("YourValue")) == 5) %>' runat="server">
        <%# Eval("SomeOtherValue") %>
    </div>
</ItemTemplate>

В моем примере используется константа, но вы можете использовать любую переменную в области видимости.

Pitfall!

DataList будет настаивать на создании пустых строк для скрытых элементов, поэтому вам, возможно, придется использовать ListView вместо этого, чтобы полностью контролировать создание отфильтрованного списка элементов.


Обновление

Использование ListView вместо этого создаст только строки для видимых элементов:

<ItemTemplate>
    <tr id="itemdiv" visible='<%# (Convert.ToInt32(Eval("YourValue")) == 5) %>' runat="server">
        <td><%# Eval("SomeOtherValue") %></td>
    </tr>
</ItemTemplate>
<LayoutTemplate>
    <table border="1">
        <tr runat="server" id="itemPlaceholder" />
    </table>
</LayoutTemplate>
...