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

これを使用してデバッグします。

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()

上記の値は null です。

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 に答える
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 に答える