2012-02-22 47 views
2

我想隱藏datalist中的一個項目,根據某些情況起訴ItemBound,怎麼樣?如何隱藏數據列表中的項目

+0

這將是從數據源中的值?如果是這樣的話,那麼最好先將它從數據源中刪除。如果您使用的是SQL數據源,則可以使用WHERE子句。 – Curt 2012-02-22 12:38:36

+0

是的,但我無法重新綁定數據列表數據,而我在ItemBound內 – Bader 2012-02-22 12:40:03

+0

如果在需要檢查的ItemBound中有值,那麼您確實可以從數據源獲得這個值? – Curt 2012-02-22 12:41:01

回答

1

圍繞ItemTemplate的整個內容控制PlaceHolder控件。

然後在你的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 [email protected] 
+0

如果'DataList'會爲這些隱藏的項目創建空行,您是否嘗試過?我認爲它看起來和我的方法一樣。 – Filburt 2012-02-22 13:14:07

+0

@Filburt我已經改進了答案,以包含隱藏該項目的可能選項。 – Curt 2012-02-22 14:58:04

+0

我試過你改進的例子,但ItemDataBound似乎不工作;即使我將「e.Item.Visible」始終設置爲「False」,它仍會創建所有項目。 – Filburt 2012-02-22 15:55:55

0

一個簡單的解決辦法是設置的知名度在你的ItemTemplate評估所需條件的項目容器:

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