2012-02-09 14 views
1

實際上,我正在開發一個使用ASP.NET和C#的網頁模板。 我有一個usercontrol頁面listviewItemTemplate裏面我有一個PlaceHolder如下:
如何從usercontrol頁面後面的代碼中找到ListView的ItemTemplate中的控件?

<asp:PlaceHolder ID="ph_Lv_EditModule" runat="server"> </asp:PlaceHolder> 

我想從代碼中訪問該PlaceHolder後面,我有如下使用不同的方法,但我不能」 t訪問它。

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頁面背後的代碼這種控制。 感謝您的考慮。

回答

6

A ListView通常包含多個項目,因此佔位符的NamingContainer(搜索範圍爲FindControl)既不是UserControl也不是ListView本身。這是ListViewItem對象。所以找到參考的一個地方是ListView's ItemDataBound event

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中的項目,然後在ListViewItem使用FindControl

順便說一下,這與其他DataBound控件(如GridView或Repeater)中的行爲相同。

0

蒂姆Schmelter提到的,你也可以通過你的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; 
    } 
} 
相關問題