Asp.net 如何在数据列表中隐藏项目

Asp.net 如何在数据列表中隐藏项目,asp.net,vb.net,datalist,Asp.net,Vb.net,Datalist,我想根据使用itemsbound的某些条件在datalist中隐藏一个项目,如何将占位符控件环绕在项目模板的整个内容上 然后在ItemDataBound事件中,您可以执行以下操作: Protected Sub myDataList_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles myDataList.ItemDataBound If Not Valu

我想根据使用
itemsbound
的某些条件在
datalist
中隐藏一个项目,如何将
占位符
控件环绕在
项目模板的整个内容上

然后在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表元素。这也意味着不必添加
占位符

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

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

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

这是来自数据源的值吗?如果是这样,那么最好首先将其从数据源中删除。如果您使用的是SQL数据源,则可以使用WHERE子句。是的,但当我在ItemBound中时,无法重新绑定datalist数据如果ItemBound中有一个值需要检查,您确实可以从数据源获得此信息吗?否,该值是动态计算的。如果您可以选择从
asp:DataList
切换到
asp:ListView
,则更新后的答案会起作用。您是否尝试过
DataList
是否会为这些隐藏项创建空行?我想它看起来和我的方法一样。@Filburt我改进了答案,加入了一个隐藏项目的可能选项。我尝试了你改进的示例,但ItemDataBound似乎不起作用;即使我将
e.Item.Visible
始终设置为
False
它仍然会创建所有项目。
<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>