Gridview没有在c#和ASP.Net中保留旧值

时间:2013-03-05 05:36:00

标签: c# asp.net gridview

我有一个正确绑定的ASP.Net gridview。编辑我正在编辑某些字段。然后我需要编辑其他行。但是当我尝试编辑其他行时,先前编辑的行会​​重置n保留他们较旧的价值观。

要求是这样的,我必须编辑许多行,然后单击按钮我需要将所有编辑值推送到数据库

7 个答案:

答案 0 :(得分:2)

您需要在回发之间维护GridView的数据源。

您可以通过将DataTable存储在缓存,会话或任何持久存储中来实现此目的。

编辑一行后,将更改保存到此DataTable,然后重新绑定Gridview(从此DataTable中)。

当用户单击“全部保存”时,您可以将已更改的DataTable行保存到数据库中。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的代码的问题是,您在页面加载时绑定网格..所以当页面加载时,它可以绑定数据库中的值。对于Post back上的写入绑定方法,并且当您单击具有该会话或隐藏字段的保存按钮更新数据库时,还会在会话或隐藏字段上维护您的值。

答案 3 :(得分:0)

上午bryan ...这是用于从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;
}

答案 4 :(得分:0)

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

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事件中绑定此会话变量中的网格。 完成编辑后,只需单击按钮即可将编辑后的内容推送到DATABASE ...

答案 5 :(得分:0)

请检查你的gridview绑定方法是调用页面加载和内部的!isPostBack?

Void page_load()
{
if(!IsPostBack)

{
//Call GridView Binding method
}

}

答案 6 :(得分:0)

protected void grdRepayment_RowEditing(object sender,GridViewEditEventArgs e)

{

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

}

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