Infragistics UltraWebGrid 控件的增删改查(CRUD)之Batch更新操作
前面的《Infragistics UltraWebGrid 控件的增删改查(CRUD)之非Batch更新操作》中,已经介绍了实现更新操作主要步骤,这些操作都是异步执行的,而且事件的触发是在控件中已经完成的了,只要你在控件中进行了操作,那么你进行另一个操作的时候,更新就会提交上去,速度很快,可能你都还没反应过来。
今天的介绍就是传说中的Infagistics UltraWebGrid控件的批量更新操作(Batch Update)。其实批量更新与Single更新几乎所有步骤都一样,不同的是,代码与事件关联的时候不再是UltraWebGrid1_DeleteRow(object sender, RowEventArgs e)及UltraWebGrid1_UpdateRow(object sender, RowEventArgs e)这两个事件了,取而代之的是他们的是批量事件
UltraWebGrid1_UpdateRowBatch(object sender, Infragistics.WebUI.UltraWebGrid.RowEventArgs e)和
UltraWebGrid1_DeleteRowBatch(object sender, Infragistics.WebUI.UltraWebGrid.RowEventArgs e)
因为批量与非批量的差异就是事件代码与事件关联不同而已,其他都相同,下面将直接显示代码,读者只要看明白了非Batch更新操作,就很容易明白批量操作怎样改变了,同样的,我们使用LinqDB数据库中的Category表来做演示,请看代码:
public partial class Test_update_Default : System.Web.UI.Page
{
DataSet3 theds3 = new DataSet3();
CategoryTableAdapter theTableAdapter = new CategoryTableAdapter();
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.GetData();
}
}
public void GetData()
{
this.UltraWebGrid1.Rows.Clear();
this.theTableAdapter.Fill(theds3.Category);
this.UltraWebGrid1.DataSource = theds3.Category;
this.UltraWebGrid1.DataBind();
this.UltraWebGrid1.Columns[0].Hidden = true;//////这里隐藏了ID列,是不想对ID进行操作,因为他是自增的,不可随便赋值
}
private void LoadUpdatableDataSet()////这是在第一篇中没有的,在这里是新增的函数,初始化,如果表中没有数据就填充数据集theds3
{
if (theds3.Tables[0].Rows.Count <= 0)
{
this.theTableAdapter.Fill(theds3.Category);
}
}
protected void UltraWebGrid1_UpdateRowBatch(object sender, Infragistics.WebUI.UltraWebGrid.RowEventArgs e)
{
LoadUpdatableDataSet();
DataSet3.CategoryRow row;
if (e.Row.DataChanged == DataChanged.Added)
{
//如果是添加状态,则在 theds3.Category中新增行
row = theds3.Category.NewCategoryRow();
}
else
{
//不然就是更新状态,获取主键定位哪行状态变了
row = theds3.Category.FindByID((int)e.Row.DataKey);
}
foreach (UltraGridCell cell in e.Row.Cells)
{
// 获取状态改变行中的各单元格中的数据
if (cell.Column.BaseColumnName != "ID")////这里不获取ID值是因为ID主键是自增的,不可随便赋值给ID
{
if (cell.Value != null)
{
row[cell.Column.BaseColumnName] = cell.Value;
}
else
{
row[cell.Column.BaseColumnName] = DBNull.Value;
}
}
}
if (e.Row.DataChanged == DataChanged.Added)
{
theds3.Category.AddCategoryRow(row);
}
}
protected void UltraWebGrid1_DeleteRowBatch(object sender, Infragistics.WebUI.UltraWebGrid.RowEventArgs e)
{
LoadUpdatableDataSet();
DataRow row = theds3.Category.FindByID((int)e.Row.Cells[0].Value);
row.Delete();
}
}
以上的代码都比较容易看明白,然后转到设计视图,在UltraWebGrid1的属性窗口中的事件标签中,将DeleteRowBatch关联对应DeleteRowBatch函数,将UpdaateRowBatch关联到相应UpdaateRowBatch函数,
完成后,还要添加一个没有事件关联的Button按钮,它什么都不做,只走到提交页面作用,从而让UltraWebGrid控件自发将相应的事件触发并执行.
转载请保留原地址:http://www.cnblogs.com/lusir/archive/2010/08/07/1794856.html,谢谢合作.
浙公网安备 33010602011771号