开源DataGridView扩展(1) 扩展支持全选的CheckBox列。
长江后浪推前浪,虽入行不是很久,但觉得自己已经老了;俱往矣,数风流人物还看今朝。已经好久没有写文章了,今天我又回来了。
一、DataGridViewEx是什么?
什么是DataGridViewEx? 如果你用过DotNetBar或者DevExpress,你就会用到比较好看漂亮功能强大的表格控件;美观我们这里不讨论,只针对功能而言;我们用过ListView和DataGridView,你有没有为了CheckBox列没有全选按钮而在你项目中就需要这样的一个按钮,你或许遇到过你想要一个漂亮一点的按钮而不是大小都随着单元格在变的按钮。那么就像DotNetBar的源码中的那样,这里小子不才,分享一点可以通过DataGridView的一些类来进行扩展的,这里命名为DataGridViewEx。
二、DataGridViewEx怎么做?
我曾经很想要一个Winform的表格,ListView功能太少,DataGridView界面太丑而且太复杂,于是就诞生了我前面WInform自定义表格那篇文章,现在回忆一下,那个表格可是从底层开始设计,设计了单元格,设计了列,设计了行的表格,反正从中也学习了表格的不少知识。
而现在想想呢,当时挺傻的,现在能使用DataGridView来扩展,那么想要一些功能既方便而且又不失去另外一些功能,并且保证了一些数据加载的可靠性等。那么简单介绍一些如何来扩展DataGridView吧。
对于DotNet库中很多方法都被写成了Sealed的,就是不可继承的;或许是微软自己都觉得他们自带的那些控件既简陋又丑陋吧,所以在控件的继承重绘上还是留给了足够的空间。对于DataGridView需要了解一下表格的组织:
列中包含:表头单元格和单元格(这个通过模板体现)。 由以上的信息可知,想要扩展DataGridView的列就必须对DataGridViewColumn、DataGridViewColumnHeaderCell、DataGridViewCell进行扩展,然后组合就可以得到一个新的列了。并且在DataGridView的设计器中列类型选择是通过反射来实现的,所以只要新增加一种,就可以自动识别。
三、支持全选的的CheckBox列的简单介绍。
1. 扩展了哪几个类。
2. 使用什么绘制CheckBox?
一方面, 在System.Windows.Forms下面有CheckBoxRender、ButtonRender、RadioButtonRender等Render,这些类库可以提供绘制方法。也可以通过ControlPaint类来进行绘制。
3. 对CheckBox的一些状态效果简单介绍。
在Render中支持绘制不同类型的CheckBox,那么现在要做的就是知道当前CheckBox属于什么状态,这个要通过MouseMove、MouseLeave、MouseDown等方法中判断鼠标位置是否在当前的checkbox上,然后设置一个当前checkbox的check状态。另外,只要在这些方法中设置一个全局CheckBoxState就行了,具体的绘制都交由Paint方法就行了。这里说明,一般这种自绘的东东中,是需要override一些Paint或者OnPaint方法的,然后在这个方法里面进行绘制。
四、后续简介
好了,也不早了,下一篇就将扩展一个Button列吧。
为了大家的分享知识,这里提供Demo : 01.[20120427]DataGridViewEx之扩展带表头全选的CheckBox列.rar
出处:http://gxjiang.cnblogs.com/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。