从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();
    }

从rowupdate中设置数据表中的值

错误可能是由于试图访问不存在的数据表行。为了给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();
}