在代码隐藏中声明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>
<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>
<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的不同方式?
找到导致原始Null Exception错误的原因。我在代码后面缺少gvBFProd的定义。
专:private GridView gvBFProd;
protected void gvBFProd_RowCommand(object sender, GridViewCommandEventArgs e)
{
gvBFProd = FormView1.Row.FindControl("gvBFProd") as GridView;
....
现在我得到一个不同的空引用异常在我的下拉列表,但这是一个不同的问题。