从rowupdate中设置数据表中的值
本文关键字:数据表 设置 rowupdate | 更新日期: 2023-09-27 18:09:03
protected void gd_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
TextBox txtAuthor;
TextBox txtBook;
dt = new DataTable();
dt=(DataTable)ViewState["dt"];
GridViewRow gdr = gd.Rows[e.RowIndex];
if (gdr != null)
{
txtAuthor = (TextBox)gd.Rows[e.RowIndex].FindControl("txtAuthor1");
txtBook = (TextBox)gd.Rows[e.RowIndex].FindControl("txtBook1");
dt = (DataTable)ViewState["dt"];
string txtAuthorName;
string txtBookName;
if (txtAuthor != null && txtBook!=null)
{
txtAuthorName = txtAuthor.Text;
txtBookName = txtBook.Text;
int i=0;
dt = (DataTable)Session["dt"];
for (; i < gd.Rows.Count; i++)
{
if (e.RowIndex == i)
{
dt.Rows[i][0] = txtAuthor.Text;
dt.Rows[i][1] = txtBook.Text;
ViewState["dt"] = dt;
gd.DataSource = dt;
gd.DataBind();
}
}
}
}
dt = (DataTable)ViewState["dt"];
gd.DataSource = dt;
gd.DataBind();
}
错误可能是由于试图访问不存在的数据表行。为了给datatable
行赋值,你必须检查datatable
中是否有那行,你检查的是grid
而不是datatable
的行,这里不需要循环,因为你可以直接使用索引访问datatable
行,只需检查e.RowIndex
是否为datatable
的有效行索引。
if (e.RowIndex <= dt.Rows.Count)
{
dt.Rows[e.RowIndex][0] = txtAuthor.Text;
dt.Rows[e.RowIndex][1] = txtBook.Text;
ViewState["dt"] = dt;
gd.DataSource = dt;
gd.DataBind();
}