代码之家  ›  专栏  ›  技术社区  ›  Elham Kohestani

在gridview的数据绑定上添加控件时执行NullReferenceExection

  •  0
  • Elham Kohestani  · 技术社区  · 8 年前

        <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound" DataKeyNames="SemesterID" DataSourceID="SqlDataSource1" >
                <Columns>
                    <asp:BoundField DataField="SemesterID" HeaderText="SemesterID" InsertVisible="False" ReadOnly="True" SortExpression="SemesterID" />
                    <asp:BoundField DataField="SemesterName" HeaderText="SemesterName" SortExpression="SemesterName" />
    <asp:TemplateField>
                        <asp:PlaceHolder ID="pHldr" runat="server"></asp:PlaceHolder>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
            <asp:SqlDataSource ConnectionString="<%$ connectionStrings:MyConnection %>" ID="SqlDataSource1" runat="server" ProviderName="System.Data.SqlClient" SelectCommand="SELECT SemesterID, SemesterName FROM Semesters"></asp:SqlDataSource>
        </form>
    </body>
    

    这是我的密码文件

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            for (int i = 0; i < 3; i++)
            {
                PlaceHolder plHldr = e.Row.FindControl("pHldr") as PlaceHolder;
                CheckBox cbx = new CheckBox();
    
                plHldr.Controls.Add(cbx);//Here I get the exception
            }
        }
    

    plHldr.Controls.Add(cbx);

    1 回复  |  直到 8 年前
        1
  •  0
  •   Koby Douek Cicero Silva Luiz Junior    8 年前

    可能是因为您没有处理第1行(带有行索引 -1 ),这是标题。尝试使用 e.Row.RowIndex

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowIndex < 0) return;
    
        for (int i = 0; i < 3; i++)
        {
            PlaceHolder plHldr = e.Row.FindControl("pHldr") as PlaceHolder;
            CheckBox cbx = new CheckBox();
    
            plHldr.Controls.Add(cbx);//Here I get the exception
        }
    }