2014-07-27 51 views
0

我有一個類似於左邊的DataGridView設置。我有一些用於圖像顯示狀態/錯誤的列。這工作正常。我的問題是,我並不喜歡將每列分成不同欄目的外觀。理想情況下,我希望列標題可以像繪製一個列標題一樣繪製,因此它看起來像右側的標題。使用默認漸變樣式繪製DataGridView ColumnHeader

有沒有辦法做到這一點,使用一些我不知道的內部DataGridView呈現方法?

我想看看通過反射DataGridView的代碼,看看它實際上它的列標題畫畫,但我無法找到任何東西。我想我可能能夠複製它正在做的事情,只是擴展單元格邊界來覆蓋前4列中的每一列。

摘要:

我有什麼:

enter image description here

我想要什麼:

enter image description here

回答

0

覆蓋的CellPainting事件爲-1 RowIndex並按照你的願望繪製它。

或者,您可以創建一個繼承自DataGridViewColumnHeaderCell的新類並重寫該方法的paint方法,但還有一些其他步驟(我不記得是非法的),您必須執行以使網格使用派生這是一種痛苦的類。

編輯:

這裏是一個更好的解釋了它的鏈接:如果鏈接死亡http://social.msdn.microsoft.com/Forums/windows/en-US/74959006-7a8a-4487-ab54-f2aac2bf7196/custom-paint-of-datagridview-column-headers

一些摘錄:

在油漆覆蓋,你會做這樣的事情:

if (e.RowIndex == -1) 
{ 
    e.Graphics.FillRectangle(Brushes.Blue, e.CellBounds); 
    e.Paint(e.ClipBounds, (DataGridViewPaintParts.All & ~DataGridViewPaintParts.Background)); 
    e.Handled = true; 
} 

如果你帶班重寫,請記住所有這一切:

如果您創建了自己的類,那麼您可以a)將列的 HeaderCell屬性設置爲您的自定義標題類的實例(您將 可能希望從標題中複製文本等一些屬性 單元格在覆蓋該值之前當前存在)。您還可以 創建一個自定義列類,將HeaderCell設置爲構造函數中的自定義 單元格。

如果您想對所有列執行此操作,請處理ColumnAdded事件 ,以便您知道何時需要設置自定義標頭單元格。

所有這一切都在我的答案編輯部分是由於馬克賴德奧特在上面的鏈接,在至少2006年

DataGridView的項目經理