DatagridView默認不支持多行表頭的實現,一些第三方的控件,比如Spread就可以,因此要實現這個功能,只能自己想辦法了。
介紹兩種思路:
1,用重寫DataGridView的Paint等方法,可以重畫表頭,這個實現起來較為復雜,費時費力,此處略去。
2,利用兩個DataGridView,一個DataGridView用來顯示第一行標題,另一個DatagridView用來顯示第二行表頭以及數據部分。
實現中遇到一個問題,當列數很多的時候,第二個DatagridView會出現水平滾動條,拉動滾動條,第一個DatagridView並沒有隨着同步滾動,解決這個問題的方法
是在第二個DatagridView的Scroll事件中寫如下代碼:
void dataGridView2_Scroll(object sender, ScrollEventArgs e) { //滾動條的位置同步 this.dataGridView1.HorizontalScrollingOffset = this.dataGridView2.HorizontalScrollingOffset }
有了上面的代碼,功能基本就出來了,但是有幾個問題要注意:
1)第二個DatagridView數據太多出現豎滾動條的時候,橫滾動條拉到最后一列的位置,會出現上下兩個DatagridView輕微錯位(一個滾動條的寬度),
原因是第一個DatagridView沒有豎滾動條,滾動的幅度會比下面一個DatagridView小一個滾動條的寬度。知道了原因,我們可以調整第一個DatagridView的
最后一列寬度假設為100,第二個DatagridView的最后一列的寬度為100-20=80,這個就預留出一個滾動條的位置。
2)這兩個DatagridView的列最后都設置成不能調整寬度,否者會出現列錯位的現象。
效果圖: