ItemBound
、何らかの条件でdatalist
にアイテムを隠したいですか?データリスト内のアイテムを非表示にする方法
2
A
答えて
1
の内容全体を制御して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
簡単な解決策はの可視性を設定することができ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>
をこのデータソースからの値になりますか?もしそうなら、おそらくそれを最初にデータソースから削除することが最善の方法です。 SQLデータソースを使用している場合は、WHERE句を使用できます。 – Curt
はい、私はItemBound内にある間にデータリストデータを再バインドできません – Bader
チェックする必要があるItemBoundに値がある場合、確かにこれをデータソースから利用できますか? – Curt