为什么我在以下代码中获得NULL EXCEPTION?

时间:2013-04-20 09:33:31

标签: asp.net gridview

我在网格视图中获取NULLREFERENCEEXCEPTION更新查询。

protected void GridView1_RowUpdating(Object sender, GridViewUpdateEventArgs e)
{
   TextBox txtname = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtname1");
   cmd.Connection = con;
   cmd.CommandText = "update test1 set Name='" + txtname.Text + "' where Roll_No = '" 
                     + GridView1.DataKeys[e.RowIndex].Values[0].ToString() + "'";
   con.Open();
   int temp = cmd.ExecuteNonQuery();
   if (temp == 1)
   {
      Label1.Text = "Record updated sucessfully"; 
   }
   GridView1.EditIndex = -1;
   FillGrid();
   con.Close();        
}

4 个答案:

答案 0 :(得分:0)

有很多,但有些可能性是

TextBox txtname = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtname1");

行中没有文本框。由于某种原因。

GridView1.DataKeys[e.RowIndex].Values[0].ToString()

以上值为空。

其他原因可能是您可能会在page_load而不是page_load (!Page.IsPostBack)上绑定它

答案 1 :(得分:0)

确保您拥有正确的控件名称并检查是否为空

if(GridView1.Rows[e.RowIndex].FindControl("txtname1")!=null)
{
  //your code
}

调试代码并查看它产生异常的位置。

答案 2 :(得分:0)

使用它来调试它。

try{ 
TextBox txtname = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtname1");
cmd.Connection = con;
cmd.CommandText = "update test1 set Name='" + txtname.Text + "' where Roll_No = '" + GridView1.DataKeys[e.RowIndex].Values[0].ToString() + "'";
con.Open();
int temp = cmd.ExecuteNonQuery();
if (temp == 1)
{ Label1.Text = "Record updated sucessfully"; }
else{Label1.Text = "Updating failure";}
GridView1.EditIndex = -1;
FillGrid();
con.Close();
}
catch (Exception e)
{
e.printStackTrace();
}

答案 3 :(得分:0)

尝试此操作以验证问题的根源:

   TextBox txtname = GridView1.Rows[e.RowIndex].FindControl("txtname1") as TestBox;
   if(txtname is null)
   {
     Response.Write("Unable to find txtname");
     return;
   }

如果您的网格位于母版页的ContentPlaceHolder中,则控件的ID将在运行时更改。您可以将textbox的“ClientIdMode”属性设置为“static”,以便ID在运行时保持不变。