如何访问列表视图的layouttemplate中的控件?

时间:2020-03-05 18:49:01  来源:igfitidea点击:

我如何在后台代码的ListViewLayoutTemplate中设置用户控件的属性?

<asp:ListView ...>
<LayoutTemplate>
<myprefix:MyControl id="myControl" ... />
</LayoutTemplate>
...
</asp:ListView>

我想做这个:

myControl.SomeProperty = somevalue;

请注意,我的控件不在" ItemTemplate"中,而是在" LayoutTemplate"中,因此并非所有项目都存在,它仅存在一次。因此,我应该能够访问一次,而不是针对每个数据绑定项。

解决方案

回答

在每个ListViewItem上使用FindControl方法。

var control = (MyControl)Item.FindControl("yourControlId");

回答

要设置LayoutTemplate内部控件的属性,只需在ListView控件上使用FindControl方法。

var control = (MyControl)myListView.FindControl("myControlId");

回答

这已在以下堆栈溢出问题中得到解答:
访问ListView的LayoutTemplate内部的控件

请参阅tanathos对已接受答案的评论。

我知道这个问题是一年多以前提出来的,但这是我以前在这里找到的搜索字词的第一个结果,因此我想将答案留给偶然发现它的任何人。

回答

布局被创建,并触发一个LayoutCreated事件,该事件表明该布局已在系统中创建。

然后,我们可以使用listview.FindControl获得对该控件的引用。

回答

var control = (MyControl)myListView.FindControl("myControlId");

这将起作用,但请确保在数据绑定之后创建,否则将不会创建LayoutTemplate,从而引发错误。