使用它的默认渐变样式绘制DataGridView ColumnHeader

时间:2014-07-27 01:03:49

标签: c# vb.net winforms datagridview

我有一个类似于左边的DataGridView设置。我有一些用于图像的列来显示状态/错误。这很好用。我的问题是,我不太喜欢将每列分成这些列的部分。理想情况下,我希望列标题绘制好像它们是一个列标题,所以它看起来像右边的那个。

有没有办法使用我不知道的一些内部DataGridView渲染方法来做到这一点?

enter image description here

我试图查看Reflector中的DataGridView代码,看看它实际上在哪里做了列标题绘画,但我找不到任何东西。我想我可以复制它正在做的事情,只是扩展单元格边界以覆盖前4列中的每一列。

要点:

我有什么:

enter image description here

我想要的是什么:

enter image description here

1 个答案:

答案 0 :(得分:0)

覆盖-1 CellPainting的{​​{1}}事件并根据需要进行绘制。

或者,您可以创建一个继承自RowIndex的新类并覆盖其中的paint方法,但是还有其他一些步骤(我不记得)如何使网格使用你的派生类,这是一种痛苦。

编辑:

这是一个更好地解释它的链接:http://social.msdn.microsoft.com/Forums/windows/en-US/74959006-7a8a-4487-ab54-f2aac2bf7196/custom-paint-of-datagridview-column-headers

链接死亡时的一些摘录:

在绘画覆盖中,您将执行以下操作:

DataGridViewColumnHeaderCell

如果您使用班级覆盖,请记住以下所有内容:

  

如果你创建自己的类,那么你可以a)设置列   HeaderCell属性为您的自定义标题类的实例(您是' ll   可能想要从标题中复制一些属性,如Text   在覆盖值之前当前存在的单元格)。你也可以   创建一个自定义列类,将HeaderCell设置为您的自定义   构造函数中的单元格。

     

如果要对所有列执行此操作,请处理ColumnAdded事件   所以你知道何时需要设置自定义标题单元格。

我的回答的编辑部分中的所有这些都归功于上面链接中的Mark Rideout,至少是2006年的DataGridView程序经理。