2012-02-22 22 views
2

ItemBound、何らかの条件でdatalistにアイテムを隠したいですか?データリスト内のアイテムを非表示にする方法

+0

をこのデータソースからの値になりますか?もしそうなら、おそらくそれを最初にデータソースから削除することが最善の方法です。 SQLデータソースを使用している場合は、WHERE句を使用できます。 – Curt

+0

はい、私はItemBound内にある間にデータリストデータを再バインドできません – Bader

+0

チェックする必要があるItemBoundに値がある場合、確かにこれをデータソースから利用できますか? – Curt

答えて

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

'DataList'が隠しアイテムに対して空の行を作成しようとしましたか?私は私のアプローチと同じように見えるだろうと思う。 – Filburt

+0

@ Filburtアイテムを隠すオプションを含めるように答えを改善しました。 – Curt

+0

改善した例を試しましたが、ItemDataBoundは機能していません。 'e.Item.Visible'を常に' False'に設定しても、それでもすべてのアイテムが作成されます。 – Filburt

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> 
関連する問題