2012-02-28 47 views
0

我有一個網格視圖與一些複選框。所以在網格視圖更新之後,我試圖查看是否選中了一個特定的複選框。不過,我得到一個錯誤說NullReference異常:當試圖檢查GridView中的複選框字段

空引用異常是由用戶代碼unhanded

我的代碼:

<asp:TemplateField HeaderText="FollowUp" SortExpression="FollowUp"> 
    <EditItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" 
      Checked='<%# Bind("FollowUp") %>' /> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:CheckBox ID="chkFollowup" runat="server" 
      Checked='<%# Bind("FollowUp") %>' Enabled="false" /> 
    </ItemTemplate> 
</asp:TemplateField> 

代碼隱藏文件:

protected void GViewSrvcCheck_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
{ 
    foreach (GridViewRow gRow in GViewSrvcCheck.Rows) 
    { 
     CheckBox fllwup = gRow.FindControl("chkFollowup") as CheckBox; 

     if (fllwup.Checked)//this is the one causes the error 
     { 
     } 
    } 
} 

這裏出了什麼問題?我該如何解決這個問題?

+0

可能的重複[什麼是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) – 2012-02-28 19:30:09

+0

您可能會添加一個頁眉/頁腳不包含該模板,因此在Rows集合中檢查時,會引發null錯誤(它找不到該對象) – 2012-02-28 19:32:03

回答

2

有兩種可能出現的問題:

  • 控制找不到
  • 這不是一個CheckBox

如果你使用的鑄鐵代替,你會知道它是:

CheckBox followUp = (CheckBox) gRow.FindControl("chkFollowup"); 

它幾乎總是錯誤地使用as之後沒有檢查無效。

我懷疑的問題是,ID 實際上有東西在它標識行,以及...但與上述改變你至少能夠告訴你正在採取哪些錯誤路徑。

您可能不得不改變如何找到控件 - 但只要「找不到控件」是錯誤,我認爲讓它拋出異常是合理的。如果控件不存在是合法的情況,則應該明確處理它 - 但除此之外,向用戶顯示錯誤頁面並記錄異常(例如,使用ELMAH)是沒有問題的。

+0

Thnx,將複選框ID「chkFollowup」從項目模板字段複選框控件更改爲編輯模板字段複選框字段解決了問題。 – Sas 2012-02-28 19:45:53