如何设置用户控件的属性 ListViewLayoutTemplate 从代码隐藏?

<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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top