[
第八篇 UltraGrid中实现增删改功能]
首先:此类的Maintain动作可能有两种情形,
一种是Grid中本来就有数据,一种是Grid中没有任何数据。两种虽说没有多大区别,但是在方法应用上稍有些不同,下面会提到。
1. 拖放一个Grid到Form,设置其属性为可编辑
![](https://p-blog.csdn.net/images/p_blog_csdn_net/venus0314/146e504c05ab409ab6d325817d5e6faa.png)
2. 添加绑定列,OK后选择第一个选项(产生DataSource)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/venus0314/b5bc46a4e47f41429bd97e122f4eeb6e.png)
如下将Grid的数据源关联到UltraDataSource上
![](https://p-blog.csdn.net/images/p_blog_csdn_net/venus0314/0a03b2119eb940aeb5b4c0aebfd9cda7.png)
3. 代码增加一个全局的List<User>用于记录当前绑定的List
(在面向对象开发中,前台获取的数据大多是从后台传回的IList类型,定义这个List也是出于这个用意)
初始无数据
private
List<User> m_UserList = new List<User>();
初始有数据
private
List<User> m_UserList = XXXProxy.GetUserList();
4. Find按钮动作如下(绑定数据到Grid上)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/venus0314/67c0c0e425384c2a9056b02177ef8f36.png)
5. 关联DataSource和IList,使Grid呈现List中的资料
此处是通过Index实现的,通过Index和DataSource之间建立一个Mapping关系,
这样做的好处是不需要手工写IList到DataSource转换的代码,而是借用DataSource事件触发数据的Load。
对于小数据量,性能上到没有多少变化,对于大数据量,打开虚拟模式开关的话(下一帖会讲到),这样做将有很大的性能提升。
如果需要将显示的数据做格式化或显示User的对象属性的子属性等,也可以在这个事件中处理,较灵活。
![](https://p-blog.csdn.net/images/p_blog_csdn_net/venus0314/e645f83ae7c2407ab519dd1e81aa3e82.png)
6. 那么如何同步User的更改到IList呢 ?(
注意以下几个事件是直接更新到List中的对象上的,性能上:分解了惯用做法(循环DataSource转换对象赋值到List)的时间)
DataSource提供了几个事件,如下,新增一行,删除一行
![](https://p-blog.csdn.net/images/p_blog_csdn_net/venus0314/a22c5dcdc7d64e648e28ed5e11caf160.png)
更新一行,其中如果有栏位的联动,也可以在CellDataUpdating事件中进行
![](https://p-blog.csdn.net/images/p_blog_csdn_net/venus0314/a479aba72ffb4760a3b3668c95b2bddf.png)
7. 如上完成了在Grid上进行增删改动作的实现