我想根据datalist
的某些条件隐藏ItemBound
中的某个项目,该怎么做?
答案 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>