C# 在codebehind中声明gridview时出现Null异常

C# 在codebehind中声明gridview时出现Null异常,c#,asp.net,gridview,C#,Asp.net,Gridview,这个问题的一部分源于在FormView中嵌入GridView并在GridView控件上运行SQL GirdView标记: <asp:GridView ID="gvBFProd" runat="server" ShowFooter="True" AutoGenerateColumns="False" DataKeyNames="BFProdID" DataSourceID="BFProdSQL" OnRowCommand="gvBFProd_RowCommand">

这个问题的一部分源于在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>
...
初始
私有GridView gvbprod是为GridView控件引用提供上下文所必需的,因为它嵌入在FormView中。然而,要么是某些信息传递不正确,要么是我需要用
私有GridView gvbprod做更多的事情行。我考虑的是后者,因为一旦项目建成,我会在gvBFProd下得到绿色的曲线,表示该字段从未分配给,并且它的默认值总是空的。当然,当我单击Insert LinkButton时,我会得到一个未处理的Null异常错误,该错误在
(DropdownList)gvbprod.FooterRow….
行中断


我是否需要为gvbprod构建get/set函数,或者是否有其他方式传递GridView?

找到了导致原始Null异常错误的原因。我在代码隐藏中遗漏了gvBFProd的定义

具体而言:

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

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

为什么要声明“private GridView gvBFProd;”?gvBFProd将已经在设计器文件中声明了可能在您的文件中声明会隐藏代码背后的gvBFProd。由于您从未对其进行初始化,因此在尝试访问其属性时可以创建一个ER。删除该声明并查看它是否有效。当我删除“private GridView gvbprod;”时,我在所有控制声明下都会看到红色的曲线,表示gvbprod在此上下文中不存在。如果我将GridView移出块,这不是问题,但是当GridView嵌套在FormView中时,会出现上下文错误。因此,gvBFProd声明。如果有更好的解决方案来修复上下文错误,我也完全赞成。我开始觉得有些事情不对劲。我取出“private GridView gvbprod;”行,并将我的GridView移到FormView的上下文之外。现在,当单击“插入”按钮时,我在第一行InsertParameters.Add()上得到一个空引用异常错误,指出对象引用未设置为对象的实例。这不是我在更新参数的代码上面的//Reference GridView控件部分中所做的吗?
private GridView gvBFProd;
    protected void gvBFProd_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        gvBFProd = FormView1.Row.FindControl("gvBFProd") as GridView;
....