Gridview在c#和ASP.Net中不再保留旧值

本文关键字:不再 保留 Net ASP Gridview | 更新日期: 2023-09-27 18:02:08

我有一个ASP。正在正确绑定的netgridview。在编辑我正在编辑某些字段。然后,我需要编辑其他行,以及。但是,当我试图编辑其他行,以前编辑的行得到重置n保留其旧值。

要求是这样的,我必须编辑许多行,在一个按钮上单击,我需要把所有的编辑值推到数据库

Gridview在c#和ASP.Net中不再保留旧值

你需要在两次回发之间维护GridView的数据源。

你可以通过将DataTable存储在Cache、Session或任何持久存储中来实现这一点。

在编辑一行时,保存更改到这个数据表,然后重新绑定Gridview(从这个数据表)。

当用户点击"save all"时,可以将DataTable中修改过的行保存到数据库中。

如果您需要跟踪哪些行已经更改,您可以在缓存或会话中维护已更改的primarykey列表。

是否在绑定网格之前检查Page_Load事件中的!IsPostBack ?如果你没有在Page_Load事件中绑定网格,请发布绑定网格的代码。

代码的问题是,您在页面加载时绑定了网格。当页面加载时,它可以绑定数据库中的值。在Post back上写绑定方法,并在会话或隐藏字段上维护你的值,当你点击保存按钮时,用会话或隐藏字段更新数据库。

早安,布莱恩…下面是从gridview获取值到数据表

的代码

private void getGridInfo()

{

    DataTable dt = new DataTable();
    DataRow dr;
    dt.Columns.Add(new System.Data.DataColumn("Select", typeof(byte)));
    dt.Columns.Add(new System.Data.DataColumn("Client", typeof(string)));
    dt.Columns.Add(new System.Data.DataColumn("PrincipleAmt", typeof(double)));

    foreach (GridViewRow row in grdRepayment.Rows)
    {
        CheckBox Select = (CheckBox)row.FindControl("ChkSelect");
        Label ClientName = (Label)row.FindControl("lblClientName");
        Label Principal = (Label)row.FindControl("lblPricipal");
        dr = dt.NewRow();
        dr[0] = Convert.ToByte(Select.Checked);
        dr[1] = ClientName.Text;
        dr[2] = Convert.ToDouble(Principal.Text);
        dt.Rows.Add(dr);
    }
    Session["TempTable"] = dt;
}

现在这里是代码更新会话变量保存数据表,这必须在Gridview的RowUpdating Event中完成。

protected void grdRepayment_RowUpdating(object sender, GridViewUpdateEventArgs e)

{

        DataTable myDatatable;
        GridViewRow row = grdRepayment.Rows[e.RowIndex]; 
        grdRepayment.EditIndex = -1; 
        if (row != null)
        {
            myDatatable = (DataTable)Session["TempTable"];
            for (int i = 0; i < myDatatable.Rows.Count; i++)
            {
                if (e.RowIndex == i)
                {
                    myDatatable.Rows[i][1] = Convert.ToString(Client);
                    myDatatable.Rows[i][2] = Convert.ToString(Principal);
                    Session["TempTable"] = myDatatable;
                    grdRepayment.EditIndex = -1;
                    grdRepayment.DataSource = myDatatable;
                    grdRepayment.DataBind();
                }
            }
        }
      }

并确保仅在RowEditing和RowCancellingEdit Events中绑定来自此会话变量的网格。编辑完成后,只需点击按钮,即可将编辑过的内容推送到DATABASE.

请检查您的gridview绑定方法是否调用了page load并且在!isPostBack?

Void page_load()
{
if(!IsPostBack)
{
//Call GridView Binding method
}
}

protected void grdRepayment_RowEditing(object sender, GridViewEditEventArgs e)

{

    grdRepayment.EditIndex = e.NewEditIndex;
    myDatatable = (DataTable)Session["TempTable"];
    grdRepayment.DataSource = myDatatable;
    grdRepayment.DataBind();
}

这就是我们需要在RowEditing和RowCancelingEdit中绑定网格的方式