3

私はサイトのページを調べましたが、私の問題に十分な一般的なものを見つけることができないようです. 他の誰かが書いたコードをデバッグしていて、GridView ステートメントに問題があります。

私の問題は、グリッドビューが常に null であることです。基本的に次のように設定されている 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 セグメントからアクセスできるようにする必要がありますか?

編集:コード スニペットを変更して、匿名テンプレートの情報を含めました。

4

2 に答える 2

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;
        } 
    }
于 2012-11-12T00:45:47.060 に答える
1

FindControl使用しているコントロールの直接の子孫のみをチェックします。childrens-children を再帰的に処理することはできません。

Jeff Atwood は実際にこの aaaaggeesss について以前にブログを書いています。

http://www.codinghorror.com/blog/2005/06/recursive-pagefindcontrol.html

于 2012-11-12T00:10:00.840 に答える