实体和实体的集合-续

前些天贴了一段实体和实体集合的代码,下面说明一下。

1. 实体类

public class OrderInfo : IEditableObject,IDataErrorInfo

    对于实体类来说,继承IEditableObject和IDataErrorInfo接口。

    IEditableObject是数据绑定中用到的,主要是三个函数:BeginEdit()、CancelEdit()、EndEdit()。
    当实体类的Collection类的对象绑定到一个DataGrid上的时候,如果用鼠标点击了DataGrid(winform)中最后一行,会创建一个新的实体对象,而且DataGrid会自动调用实体类的IEditableObject接口中的BeginEdit方法。当你编辑到一半,觉得不需要添加了,可以按键盘上的Esc键来取消键入,此DataGrid会自动调用IEditableObeject接口中的CancelEdit方法来取消键入。在我所写的代码里面,还有触发一个RemoveMe的事件给实体类的Collection对象。这个时候OrderInfoCollection会Remove这个新增的OrderInfo。
    当然,也可以用IEditable的这三个方法来完成回滚。例如先手动调用BeginEdit来修改数据,修改完毕以后用EndEdit来提交修改的数据,修改失误了,可以用CancelEdit来回滚。

    对于IDataErrorInfo接口,它只有两个属性public string Error和public string this[string strErrorName],其实也是用于数据绑定中的,如果添加或者修改的数据是错误的(可以在Error的get方法里面写出具体的判断然后返回错误信息),也就是说Error属性不等于""的时候,DataGrid(又是winform的)会在那一行的最前面给出具体的错误信息(其实也就是Error属性的值),而不需要另外的编码。当然,其他的数据绑定也能实现这样的效果。

    另外还有一个internal class OrderInfoEventArgs : EventArgs,是一个空类,其实现在并不需要这个类,但是为了以后的扩充,保留了它。

2.  实体类的集合

public class OrderInfoCollection : CollectionBase,IBindingList

    对于实体集合来说,继承自CollectionBase类和IBindingList接口

    继承CollectionBase是完成了类似ArrayList的功能,例如Add、Clear、Remove等,还有new了GetEnumerator() 迭代方法,这样就可以在foreach中使用OrderInfoCollection 类了。

    实体集合实现IBindingList 接口,可以实现数据绑定的功能,包括排序、查找也可以在此接口里面实现。例如如果OrderInfoCollection绑定了DataGrid(winform),当你鼠标点击最下面的空行时候,如果OrderInfoCollection的AllowNew 属性返回true,则自动调用OrderInfoCollection中的 object IBindingList.AddNew() 方法来创建一个新的OrderInfo,还自动调用OrderInfo的BeginEdit方法(如果OrderInfo中实现了IEditableObject接口的话)。

    此外还增加了一个ListChanged事件。当操作集合的时候均会触发此事件(在添加修改删除等完毕以后)。
posted @ 2006-01-22 02:24  torome  阅读(243)  评论(0编辑  收藏  举报