我有一个正确绑定的 ASP.Net gridview。在编辑时我正在编辑某些字段。然后在我还需要编辑其他行之后。但是当我尝试编辑其他行时,以前编辑的行被重置 n 保留它们的旧价值观。
要求是这样的,我必须编辑许多行并且单击按钮我需要将所有编辑值推送到数据库
您需要在回发之间维护 GridView 的数据源。
您可以通过将 DataTable 存储在 Cache、Session 或任何持久性存储中来做到这一点。
编辑一行后,将更改保存到此 DataTable,然后重新绑定 Gridview(来自此 DataTable)。
当用户点击“全部保存”时,您可以将DataTable的更改行保存到数据库中。
如果您需要跟踪哪些行已更改,您可以维护缓存或 Session 中已更改的 PrimaryKey 列表。
在绑定网格之前,您是否在 Page_Load 事件中检查 !IsPostBack ?如果您没有在 Page_Load 事件中绑定网格,请发布绑定网格的代码。
protected void grdRepayment_RowEditing(对象发送者,GridViewEditEventArgs e)
{
grdRepayment.EditIndex = e.NewEditIndex;
myDatatable = (DataTable)Session["TempTable"];
grdRepayment.DataSource = myDatatable;
grdRepayment.DataBind();
}
这就是我们需要在 RowEditing 和 RowCancelingEdit 中绑定网格的方式
您的代码的问题是,您在页面加载时绑定了网格。所以当页面加载时,它可以绑定数据库中的值。对于 Post back 上的 write bind 方法,并在您单击保存按钮时使用该会话或隐藏字段更新数据库时,还维护您在会话或隐藏字段上的值。
早上布莱恩......这是从gridview获取值到数据表的代码
私人无效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 事件中完成。
protected void grdRepayment_RowUpdating(对象发送者,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 事件中从该会话变量绑定网格。完成编辑后,只需单击按钮,将编辑的内容推送到数据库...
请检查您的 gridview 绑定方法是调用页面加载和内部!isPostBack?
为了
Void page_load()
{
if(!IsPostBack)
{
//Call GridView Binding method
}
}