NullReference异常:当尝试检查gridview中的复选框字段时

时间:2012-02-28 19:26:51

标签: c# asp.net gridview

我有一个带有一些复选框的网格视图。因此,在网格视图更新后,我试图查看是否选中了一个特定的复选框。但是,我收到错误说

  

空引用异常由用户代码

取消

我的代码:

<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
        { 
        }
    }
}

这里出了什么问题?我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:2)

有两个可能的问题:

  • 无法找到控件
  • 这不是CheckBox

如果您使用了演员表,那么您就知道它是什么:

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

使用as后几乎总是错误而没有检查无效。

我怀疑问题是ID 实际还有一些东西可以识别其中的行...但是通过上面的更改你至少可​​以告诉你哪个错误路径正在服用。

你可能不得不改变你找到控件的方式 - 但只要“找不到控件”是错误,我认为让它抛出异常是合理的。如果控件不存在是合法的情况,你应该明确地处理它 - 但是,否则,向用户显示错误页面并记录异常(例如使用ELMAH)就可以了。