長江后浪推前浪,雖入行不是很久,但覺得自己已經老了;俱往矣,數風流人物還看今朝。已經好久沒有寫文章了,今天我又回來了。
一、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



