如何隐藏datalist中的项目

时间:2012-02-22 12:37:25

标签: asp.net vb.net datalist

我想根据datalist的某些条件隐藏ItemBound中的某个项目,该怎么做?

2 个答案:

答案 0 :(得分:1)

围绕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

更好的方法(但我没有机会测试它),是使用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

答案 1 :(得分:0)

一个简单的解决方案是通过评估ItemTemplate中的所需条件来设置Item容器的可见性:

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

我的示例使用常量,但您可以使用范围中的任何变量。

<强>陷阱!

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>