0
此問題的一部分源於在GridView控件中嵌入GridView並在GridView控件上運行SQL。在代碼隱藏中聲明Gridview的空異常
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();
}
}
初始private GridView gvBFProd;
必要由於被嵌入在FormView中,得到上下文到GridView控制的引用。然而,要麼傳遞不正確,要麼我需要用private GridView gvBFProd;
這一行。我在考慮後者,因爲一旦項目建成後,我得到gvBFProd下的綠色曲線,聲明該字段永遠不會分配給該字段,並且將始終具有其默認值null。當然,當我點擊Insert LinkButton時,我得到一個未處理的Null異常錯誤,該錯誤在(DropdownList)gvBFProd.FooterRow....
行中斷。
我是否需要爲gvBFProd構建get/set函數,還是有不同的方式傳遞GridView?
你爲什麼要聲明「private GridView gvBFProd;」? – Viru
gvBFProd已經在設計器文件中聲明 – Viru
也許在你的文件中聲明它隱藏了後面代碼中的gvBFPROD。而且,由於您從不初始化它,所以當您嘗試訪問其屬性時,可以使用ER。刪除該聲明並查看它是否有效。 – mason