题
如何设置用户控件的属性 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 将不会被创建,从而引发错误。
使用 查找控件 每个 ListViewItem 上的方法。
var control = (MyControl)Item.FindControl("yourControlId");
这已经在 Stack Overflow 问题中得到了回答:
访问 ListView 的 LayoutTemplate 内的控件
请参阅 tanathos 对已接受答案的评论。
我知道这是一年多前提出的问题,但这是我在这里使用的搜索词的第一个结果之一,所以我想把答案留给其他偶然发现它的人。
布局被创建,并触发 LayoutCreated 事件,表明布局已在系统中创建。
然后,您可以使用 listview.FindControl 来获取对该控件的引用。
如果您需要 VB.net 版本,这里是:
Dim control = CType(myListView.FindControl("myControlId"), MyControl)
不隶属于 StackOverflow