OutlookGrid是主要对象,它引用并控制了其它所有对象。除了像Columns(译注:此为DataGridView的属性成员之一)属性、方法、成员和集合它继承自DataGridView之外,例如,还有下面三个属性成员是特别有趣的:
RowTemplate属性,和与之相关的:Rows(行)集合。
DataSource属性其被用于处理我们自己的DataSources(数据源)。
GroupTemplate属性是新加入的,它决定应该用到哪一个分组对象。
OutlookGrid只用OutlookGridRow对象工作。因此,RowTemplate属性已被重写为新的,所以它不允许设置一个新的RowTemplate对象。这意味着Rows集合将只包含OutlookGridRow对象。这是重要的,因为OutlookGridRow决定一个行在该控件上如何被绘制。除此之外,OutlookGrid也用DataSourceManager对象管理其自身的数据源。这里有一个令人感兴趣的现象是:DataSourceManager也可以用OutlookGrid作为一个数据源!在用非绑定数据工作时这特别有用。然而,对于用户,这是透明的。
GroupTemplate,如前面例子中所示,主要确定Groups在排序操作中是如何被创建。用克隆GroupTemplate对象来动态创建新的分组。因此,在排序前改变分组模版的属性将导致所有分组克隆这些属性。
OutlookGridRow
OutlookGridRow用两个新的属性进行了扩展:
IsGroupRow确定这个行是作为分组还是一个一般行来绘出。
Group确定了该行所属的分组。
因此,这意味着行(row)不是作为一个Group-row(分组行)显示展开/折叠图标以及分组文本,就是作为一个普通行只通过调用基类来绘制自己。为了恰当地这样做,两个方法需要被重写:Paint和PaintCells方法。一个附加方法:PaintHeader可以被重写,它决定了行的头如何被绘出。(译注:PaintHeader是此方法在 .NET Framework 2.0 版中是新增的。本文实现代码中没有重写。)
因为每一行是被放在一个分组中并且将获得一个引用到分组,每一行也可以自行决定是否它应该被绘出。比如,如果这个分组被折叠,行就不应该绘出。为了让基控件认为:这个数据项被设置为不可见,而不是设置Row.Visible属性为false,我们需要重写GetState方法。不知何故,设置一行的Visible属性触发了所有种类的事件并启动了基控件重绘。并且,一旦它的分组被再次标识为扩展,被设置为不可见的行将不能被绘出!为了解决这个问题,我们重写了GetState方法更换之。GetState方法将标识该行为只读, 而不是为了显示,然而该行(Row)的Visible属性将仍是true!这将使得基控件保持设法绘出该行。这正是我们需要支持的折叠和展开功能的行为。
巧 巧 读 书:http://www.qqread.com/outlook/b350425.html进入讨论组讨论。相关专题
- Javamail写带附件eml文件并调用Outlook (0次浏览)



