私は次のように設定しているasp.netにグリッドビューを持っています:
sda1 = new SqlDataAdapter("select * from tran_dtls where tc='" + tcdropDown.SelectedValue + "'and doc_no='" + DocNoTxt.Text + "'", con);
build = new SqlCommandBuilder(sda1);
sda1.Fill(ds); //ds is a data set
GridView1.DataSource = ds;
GridView1.DataBind();
ds を新しいデータ テーブルに渡してグリッド ビューを更新し、データ テーブルに新しい行を追加してから、再びデータ テーブルをグリッドにバインドします。
dt = (DataTable)ViewState["myViewState"];
dt = ds.Tables[0];
dr = dt.NewRow();
dr["TC"] = Session["TC"];
dr["sr_no"] = Session["i"].ToString(); //I have more fields but for simplicity only displaying few
dt.Rows.Add(dr);
dt.AcceptChanges();
ViewState["myViewState"] = dt;
Session["gridRow"] = dt;
今まではすべてスムーズですが、データベースを更新しようとすると(データセットに新しいエントリを挿入した後)、保存ボタンのコードは以下のように機能しません:
protected void onSaveClick(object sender, EventArgs e)
{
dt = (DataTable)Session["gridRow"];// I am passing the data table in a session as I am entering the new entry from a pop up window
dt.GetChanges(DataRowState.Modified);
sda1.Fill(dt);
sda1.Update(dt);
}
面白い部分は、dt の既存のエントリを編集するときに編集 (従来の SQL 更新) を行うが、データ テーブルに追加された新しいエントリを挿入することはなく、エラーもスローしないことです。