频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

OutlookGrid:以Outlook样式分组和排列数据项

来源: 作者: 出处:巧巧读书 2007-10-09 进入讨论组
上一页 1 2 3 4 5 6 7 8 下一页 

  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进入讨论组讨论。
上一页 1 2 3 4 5 6 7 8 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章