我知道如何拥有一个可编辑的GridView以及一个SqlDataSource,其中每个编辑(更新/插入/删除)都会立即保存到数据库中(使用SqlDataSource的UpdateCommand,Insertcommand等)。
我现在需要的是拥有一个可编辑的GridView,它可以维护viewstate中的所有编辑,直到用户在表单的其他位置按下“保存”按钮。
换句话说:
我假设我需要编写自定义代码以在步骤3中保留数据,但是第2步是否采用了直接的,开箱即用的方法?
答案 0 :(得分:2)
您想要使用DataSet或DataTable并使用以下内容:
myDataSet.AcceptChanges();
当您在DataSet,DataTable或DataRow上调用该方法时,它会提交更改。您可以将其视为需要提交或回滚的SqlTransaction。希望这有帮助!
请参阅链接:Accept Changes
答案 1 :(得分:1)
我可以建议做以下事项:
1)创建一个存储数据的自定义列表对象。将DB数据上载到该对象并将其保存到会话状态。
对象:
public class InvestorClaim
{
public InvestorClaim()
{
}
private int? _record_id;
private int? _ic_record_id;
private Int64? _lh_record_id;
public int? record_id
{
get { return _record_id; }
set { _record_id = value; }
}
public int? ic_record_id
{
get { return _ic_record_id; }
set { _ic_record_id = value; }
}
public Int64? lh_record_id
{
get { return _lh_record_id; }
set { _lh_record_id = value; }
}
}
将数据上传到列表:
List<InvestorClaim> inv_claim = new List<InvestorClaim>();
inv_clai= dataFromDB
保存到会话:
HttpContext.Current.Session[ "InvestorClaimsObject" ] = inv_claim;
2)将gridview绑定到对象并根据需要操作数据。
protected void yourGridView_Bind()
{
inv_claim = HttpContext.Current.Session[ "InvestorClaimsObject" ] as List<InvestorClaim>;
yourGridView.DataSource = inv_claim;
BindData();
}
protected void yourGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
inv_claim = HttpContext.Current.Session[ "InvestorClaimsObject" ] as List<InvestorClaim>;
//Update the values.
GridViewRow row = yourGridView.Rows[e.RowIndex];
inv_claim[row.DataItemIndex].lh_record_id = ((TextBox)(row.Cells[1].Controls[0])).Text;
inv_claim[row.DataItemIndex].ic_record_id = ((TextBox)(row.Cells[2].Controls[0])).Text;
//Reset the edit index.
yourGridView.EditIndex = -1;
//Bind data to the GridView control.
yourGridView.DataSource = inv_claim;
BindData();
}
3)准备好后,将数据从会话列表对象保存到数据库。