リストビューのレイアウトテンプレートのコントロールにアクセスするにはどうすればよいですか?
質問
ユーザー コントロールのプロパティを設定するにはどうすればよいですか? ListView
さんの LayoutTemplate
コードビハインドから?
<asp:ListView ...>
<LayoutTemplate>
<myprefix:MyControl id="myControl" ... />
</LayoutTemplate>
...
</asp:ListView>
これをやりたいです:
myControl.SomeProperty = somevalue;
私のコントロールが及んでいないことに注意してください ItemTemplate
, 、にあります LayoutTemplate
, したがって、すべての項目に存在するわけではなく、一度だけ存在します。したがって、データ バインドされたすべてのアイテムに対してではなく、一度アクセスできる必要があります。
解決
LayoutTemplate 内にあるコントロールのプロパティを設定するには、ListView コントロールの FindControl メソッドを使用するだけです。
var control = (MyControl)myListView.FindControl("myControlId");
他のヒント
var control = (MyControl)myListView.FindControl("myControlId");
これは機能しますが、データ バインド後に実行するようにしてください。そうしないと、LayoutTemplate が作成されていないため、エラーがスローされます。
使用 FindControl 各 ListViewItem のメソッド。
var control = (MyControl)Item.FindControl("yourControlId");
これは、この Stack Overflow の質問で回答されています。
ListView の LayoutTemplate 内のコントロールにアクセスする
tanathos による受け入れられた回答に関するコメントを参照してください。
これが 1 年以上前に質問されたことは知っていますが、これは私がここで使用した検索用語の最初の結果の 1 つであるため、この問題に遭遇した他の人のために答えを残しておきたかったのです。
レイアウトが作成され、レイアウトがシステムで作成されたことを示す LayoutCreated イベントが発生します。
次に、listview.FindControl を使用して、そのコントロールへの参照を取得できます。
VB.net バージョンが必要な場合は、ここにあります。
Dim control = CType(myListView.FindControl("myControlId"), MyControl)