2012-11-12 171 views
3

我已經瀏覽了網站上的頁面,但似乎找不到足以解決我的問題的東西,所以希望有人知道該怎麼做。我正在調試別人編寫的一些代碼,並且遇到了GridView語句的問題。ASP.net .FindControl()和GridView返回null

我的問題是,我的gridview始終爲空。我在一個在LoginView中的面板中聲明瞭一個GridView,它基本如下設置。

<asp:LoginView ID="LoginView1" runat="server" onviewchanged="LoginView1_ViewChanged"> 
<AnonymousTemplate>&nbsp;Please <a href="../Default.aspx"> Log In </a></AnonymousTemplate> 
<LoggedInTemplate> 
     <asp:Panel ID="Panel1" runat="server"> 
      <asp:GridView ID="GridView1" runat="server" 
       AutoGenerateColumns="False" CellPadding="2" 
       DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Horizontal" 
       BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" 
       BorderWidth="1px" Width="970px" OnRowCommand="GridView1_RowCommand" 
       PageSize="40" AllowSorting="True"> 

之後,在C#中的文件,我有以下聲明

GridView GridView1 = (GridView)LoginView1.FindControl("GridView1"); 

當我去運行代碼,我得到GridView1的NullRefrenceException。我是否需要深入研究面板以引用GridView,還是應該能夠從主LoginView1段訪問它?

編輯:改變了我的代碼片段,包括信息的匿名模板

+1

您是否正在使用母版頁? –

+0

您是否在登錄時登錄?匿名模板中有什麼? – MikeSmithDev

+0

匿名模板只是一個登錄屏幕。所有的工作都是通過loginview – user1816892

回答

2

查找子控件的控制是,出現了很多的問題。您可以考慮使用擴展方法,以便您可以輕鬆地調用Jeff Atwood的遞歸子控件(如Simon答案中所引用的)或您編寫的任何版本。這只是使用其他帖子中的代碼的一個示例:

GridView GridView1 = (GridView)LoginView1.FindControlRecursive("GridView1"); 

以下是代碼。

public static class WebControlExtender 
    { 
     public static Control FindControlRecursive(this Control root, string id) 
     { 
      if (root.ID == id) 
      { 
       return root; 
      } 

      foreach (Control c in root.Controls) 
      { 
       Control t = FindControlRecursive(c, id); 
       if (t != null) 
       { 
        return t; 
       } 
      } 

      return null; 
     } 
    } 
+0

完成的,這似乎解決了我的問題。非常感謝你 – user1816892

+1

其實,它似乎沒有工作。我已經實現了代碼,但它似乎總是返回null,因爲我仍然得到空例外問題。 – user1816892

+0

你從來沒有回答我的其他問題。你在做什麼時登錄?匿名模板中有什麼?如果你沒有登錄,那麼是的,它將是空的。 – MikeSmithDev