在代码隐藏中声明gridview的Null异常

本文关键字:Null 异常 gridview 声明 代码 隐藏 | 更新日期: 2023-09-27 18:14:31

这个问题的部分原因是在FormView中嵌入GridView并在GridView控件上运行SQL。

GirdView标记:

<asp:GridView ID="gvBFProd" runat="server" ShowFooter="True" AutoGenerateColumns="False" DataKeyNames="BFProdID" DataSourceID="BFProdSQL" OnRowCommand="gvBFProd_RowCommand">
            <Columns>
                <asp:TemplateField ShowHeader="False">
                    <EditItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" CommandName="Update" Text="Save"></asp:LinkButton>
                        &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                    </EditItemTemplate>
                    <FooterTemplate>
                        <asp:LinkButton ID="ButtonAdd" runat="server" CommandName="FooterInsert" Text="Insert"  />
                    </FooterTemplate>
                    <ItemTemplate>
                        <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit"></asp:LinkButton>
                        &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
...
后台代码

private GridView gvBFProd;
    protected void gvBFProd_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        gvBFProd = FormView1.Row.FindControl("gvBFProd") as GridView;
        if (e.CommandName == "FooterInsert" && Page.IsValid)
        {
            // Reference GridView Controls
            TextBox txtBFID = (TextBox)FormView1.Row.FindControl("txtBFID");
            DropDownList ddlSeries =
                (DropDownList)gvBFProd.FooterRow.FindControl("ddlFooterSeries");
            TextBox txtACMWelders =
                (TextBox)gvBFProd.FooterRow.FindControl("txtFooterACMWelders");
....                
// Update InsertParameters
            BFProdSQL.InsertParameters.Clear();
            BFProdSQL.InsertParameters.Add("BFID", txtBFID.Text);
            BFProdSQL.InsertParameters.Add("SeriesID", ddlSeries.SelectedValue);
            BFProdSQL.InsertParameters.Add("NumACMWelders", txtACMWelders.Text);
...         

// Insert new record
            BFProdSQL.Insert();
        }
    }

由于嵌入到FormView中,最初的private GridView gvBFProd;是为GridView控件引用提供上下文所必需的。然而,要么有些东西没有正确传递,要么我需要用private GridView gvBFProd;行做更多的事情。我认为后者一旦项目建成,我得到绿色弯弯曲弯的gvBFProd下声明该字段从未被分配,并将始终具有其默认值为空。当然,当我点击插入链接按钮时,我得到一个未处理的空异常错误,在(DropdownList)gvBFProd.FooterRow....行中断。

我是否需要为gvBFProd构建get/set函数,或者是否有传递GridView的不同方式?

在代码隐藏中声明gridview的Null异常

找到导致原始Null Exception错误的原因。我在代码后面缺少gvBFProd的定义。

专:

private GridView gvBFProd;
    protected void gvBFProd_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        gvBFProd = FormView1.Row.FindControl("gvBFProd") as GridView;
....

现在我得到一个不同的空引用异常在我的下拉列表,但这是一个不同的问题。