Gridviewで行を更新すると、 "オブジェクト参照がオブジェクトのインスタンスに設定されていません"が表示されます。私は何時間もの研究を理解することができませんでした。ASP.NETでGridview行を更新するときにエラーが発生するC#
この小さなプロジェクトは、切断されたデータアクセスを処理するためにキャッシュを使用するためのプロジェクトです。
private void GetDataFromDB()
{
string CS = ConfigurationManager.ConnectionStrings["TST"].ConnectionString;
SqlConnection conn = new SqlConnection(CS);
string strSelectQry = "Select * From tblStudents";
SqlDataAdapter da = new SqlDataAdapter(strSelectQry, conn);
DataSet ds = new DataSet();
da.Fill(ds, "Students"); // fill dataset with records from select query and name table "Students" (can name whatever you like).
ds.Tables["Students"].PrimaryKey = new DataColumn[] {ds.Tables["Students"].Columns["ID"] };
Cache.Insert("DATASET", ds, null, DateTime.Now.AddHours(24), System.Web.Caching.Cache.NoSlidingExpiration);
gvStudents.DataSource = ds;
gvStudents.DataBind();
}
protected void gvStudents_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
if (Cache["DATASET"] != null)
{
DataSet ds = (DataSet)Cache["DATASET"];
DataRow dr = ds.Tables["Students"].Rows.Find(e.Keys["ID"]); // get the row thats being edited
dr["Name"] = e.NewValues["Name"]; // update fields in datarow
dr["Gender"] = e.NewValues["Gender"];
dr["TotalMarks"] = e.NewValues["TotalMarks"];
// store the dataset back into the cache
Cache.Insert("DATASET", ds, null, DateTime.Now.AddHours(24), System.Web.Caching.Cache.NoSlidingExpiration);
gvStudents.EditIndex = -1; // take row out of edit mode
GetDataFromCache(); // update gridview with updated dataset from cache
}
}
私はライン上で "gvStudents_RowUpdating(...)" メソッドでオブジェクト参照エラーを取得しています::DR [ "名前"] = e.NewValues [ここ
コードです"名"];
がアプリをデバッグしようとしたとヌルが何であるかを確認しました:だから、
gvStudents.DataBind();
後、データキーから現在のIDを取得し、あなたのRowUpdating方法では、次にを追加nullになる)? – Gusman
@Gusmanはい、私はそれをデバッグし、drはnullです。しかし、drは編集中のGridview行からのデータを含んでいる必要があります – hmakled
あなたはIDを使ってあなたのキャッシュ上でdrを検索しています。あなたがIDを受け取っているかどうか、そしてキャッシュが本当に動作しているかどうかを確認してください。 – Gusman