我有一个正确绑定的ASP.Net gridview。编辑我正在编辑某些字段。然后我需要编辑其他行。但是当我尝试编辑其他行时,先前编辑的行会重置n保留他们较旧的价值观。
要求是这样的,我必须编辑许多行,然后单击按钮我需要将所有编辑值推送到数据库
答案 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中绑定网格的方式