2015-09-25 47 views
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> 
         &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(); 
     } 
    } 

初始private GridView gvBFProd;必要由於被嵌入在FormView中,得到上下文到GridView控制的引用。然而,要麼傳遞不正確,要麼我需要用private GridView gvBFProd;這一行。我在考慮後者,因爲一旦項目建成後,我得到gvBFProd下的綠色曲線,聲明該字段永遠不會分配給該字段,並且將始終具有其默認值null。當然,當我點擊Insert LinkBut​​ton時,我得到一個未處理的Null異常錯誤,該錯誤在(DropdownList)gvBFProd.FooterRow....行中斷。

我是否需要爲gvBFProd構建get/set函數,還是有不同的方式傳遞GridView?

+1

你爲什麼要聲明「private GridView gvBFProd;」? – Viru

+1

gvBFProd已經在設計器文件中聲明 – Viru

+0

也許在你的文件中聲明它隱藏了後面代碼中的gvBFPROD。而且,由於您從不初始化它,所以當您嘗試訪問其屬性時,可以使用ER。刪除該聲明並查看它是否有效。 – mason

回答

0

發現導致原始Null異常錯誤的原因。我錯過了代碼隱藏中gvBFProd的定義。

具體做法是:

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

現在,我讓我的下拉列表不同的空引用異常,但是這是一個不同的問題。