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函数,

image

image

完成后,还要添加一个没有事件关联的Button按钮,它什么都不做,只走到提交页面作用,从而让UltraWebGrid控件自发将相应的事件触发并执行.

image

 

转载请保留原地址:http://www.cnblogs.com/lusir/archive/2010/08/07/1794856.html,谢谢合作.

posted @ 2010-08-07 21:17  lusir  阅读(1143)  评论(0)    收藏  举报