这是一个WinForm C#应用程序问题。当调用InvalidateCell时,DataGridView不调用Paint方法
我有一个DataGridView,我需要一个定制类型的DataGridViewColumn的,这样当我的鼠标在该列的单元格,单元格绘制一些特别的东西就可以了。我发现a way覆盖DataGridViewTextBoxCell自己做绘画。那篇文章展示了一个实现翻转单元的例子,当你将鼠标移动到一个单元格上时,它会在它自身的边界上绘制一个红色的矩形。
如果您看到该示例,您会发现示例填充数据的方式是直接将行创建到网格。当我使用数据绑定而不是直接行填充时,我发现单元格不会在开始时自己绘制。实际上,您必须先选择一个单元格,然后该行上的所有单元格才能正确绘制。如果您没有选择某一行的单元格,则该行上的所有单元格都不会在鼠标悬停在其上时进行相应的绘制。
我认为这是网格的某种优化,当你选择一个单元格时,该行的底层对象被激活,当InvlidateCell方法被调用时,网格将调用Paint方法。但是如果一行的底层对象没有被激活,那么网格将只使用默认方法绘制单元格以节省时间。
显然,我不需要优化,但速度慢。这对我来说并不重要,因为我在这个网格上的数据永远不会太大。我怎样才能实现它?我试图在数据绑定到网格后调用grid.Refresh(),但这没有帮助。
谢谢您的建议。
Ji
如果我把this.DataGridView.Refresh()在OnMouseEnter在和OnMouseLeave在方法,问题是固定的。但是这会导致整个网格在鼠标移动时闪烁。我相信这不是一个好的解决方案。 – Steve 2009-08-18 07:05:20