我在网格视图中获取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();
}
答案 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在运行时保持不变。