Gridview在c#和ASP.Net中不再保留旧值
本文关键字:不再 保留 Net ASP Gridview | 更新日期: 2023-09-27 18:02:08
我有一个ASP。正在正确绑定的netgridview。在编辑我正在编辑某些字段。然后,我需要编辑其他行,以及。但是,当我试图编辑其他行,以前编辑的行得到重置n保留其旧值。
要求是这样的,我必须编辑许多行,在一个按钮上单击,我需要把所有的编辑值推到数据库
你需要在两次回发之间维护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中绑定网格的方式