0

我正在获取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

4 回答 4

0

试试这个来验证问题的根源:

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

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

于 2013-04-20T09:47:59.717 回答
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();
}
于 2013-04-20T09:44:34.723 回答
0

有很多,但有些可能性是

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

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

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

上述值为空。

其他原因可能是您可能将其绑定page_load而不是page_load (!Page.IsPostBack)

于 2013-04-20T09:38:09.530 回答
0

确保您拥有正确的控件名称并检查 null

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

调试您的代码并查看它在哪里生成异常。

于 2013-04-20T09:38:50.110 回答