2010-05-25 49 views
0

我是新來的這個ASP.NET的東西。在我的頁面中,我有一個帶有FooterTemplate的Datalist。在頁腳中,我有一些可根據QueryString顯示的面板。我遇到的問題是試圖在Page_Load上找到這些面板來更改可見屬性。有沒有辦法在Page_Load中找到這個控件?例如,這是aspx頁面的一部分:DataList中的ASP.NET面板FindControl更改屬性C#

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<asp:DataList ID="dlRecords" runat="server"> 
    <FooterTemplate> 
    <asp:Panel ID="pnlArticleHeader" runat="server" Visible="false" > 
    </asp:Panel> 
    </FooterTemplate> 
</asp:Datalist> 
</asp:Content> 

下面是一些在代碼隱藏:

protected void Page_Load(object sender, EventArgs e) 
    { 
     location = Request.QueryString["location"]; 
     if (location == "HERE") 
     { 
      Panel pnlAH = *Need to find control here*; 
      pnlAH.Visible=true; 
     } 
     } 

就像我說我是新這裏。我發現的一切似乎都不起作用,因此我決定發佈具體問題。在此先感謝

回答

0

DataList的活動OnItemCreated,壓倒一切的允許選擇類型行:

Panel _pnlArticleHeader; 
    void Item_Created(Object sender, DataListItemEventArgs e) 
    { 

    if (e.Item.ItemType == ListItemType.Footer) 
    { 

     _pnlArticleHeader =(Panel)e.Item.FindControl("pnlArticleHeader"); 
     } 

    } 

在現場事件調用後:_pnlArticleHeader你會得到所需的面板。這種方式是安全的,因爲只創建一次。注意!常見DataList行的相同方式將只返回最後一行。

+0

這是我得到的第一個工作。謝謝。我現在唯一的問題是我如何在我的代碼中使用它。例如在Page_Load中,我得到了QueryString的位置。根據值,我有不同的代碼塊。我想把這段代碼放在代碼中,而不是單獨的OnItemCreated代碼塊。我將如何完成這項工作? – SDC 2010-05-25 16:09:48

+0

也許我只是不明白datalist是如何/何時構建的。也許我只是表現出對工作原理的無知。是否有可能在OnItemCreated之外? – SDC 2010-05-25 19:03:04

+0

@SDC爲了達到這個目的,你把這個處理器'Item_Created'放到Page_Load所在的同一個文件中。該事件將在Page_load之前執行,因此將分配變量_pnlArticleHeader。在用於控制的aspx文件中,需要聲明事件處理程序: Dewfy 2010-05-26 06:01:39

相關問題