如何从usercontrol页面后面的代码中找到ListView的ItemTemplate中的控件?
实际上,我正在使用ASP.NET和C#开发一个Web模板。 我在usercontrol
页面中有一个listview
,在ItemTemplate
里面我有一个PlaceHolder
,如下所示:
我想从后面的代码访问这个PlaceHolder
,我使用不同的方法如下,但我无法访问它。
PlaceHolder ph_Lv_EditModule = (PlaceHolder)lv_Uc_Module.FindControl("ph_Lv_EditModule");
要么
PlaceHolder ph_Lv_EditModule = (PlaceHolder)this.lv_Uc_Module.FindControl("ph_Lv_EditModule");
你能帮我找一下如何在我的usercontrol
页面后面的代码中找到这个控件。 感谢您的考虑。
ListView
通常包含多个项目,因此Placeholder的NamingContainer (由FindControl
搜索)既不是UserControl,也不是ListView本身。 它是ListViewItem对象。 所以找到引用的地方是ListView的ItemDataBound事件 。
protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e) { if (e.Item.ItemType == ListViewItemType.DataItem) { var ph_Lv_EditModule = (PlaceHolder)e.Item.FindControl("ph_Lv_EditModule"); } }
如果您需要其他地方的引用,则必须迭代ListView的Items,然后在ListViewItem
上使用FindControl
。
顺便说一句,这与GridView或Repeater等其他DataBound控件的行为相同。
正如Tim Schmelter所提到的,您也可以通过迭代ListView
来访问您的ListView
,如下所示
private void HideMyEditModule() { foreach (var item in lv_Uc_Module.Items) { PlaceHolder holder = item.FindControl("ph_Lv_EditModule") as PlaceHolder; if (holder!= null) holder.Visible = false; } }