C# 何时是Datagridview';什么是绘画和细胞绘画?

C# 何时是Datagridview';什么是绘画和细胞绘画?,c#,datagridview,draw,paint,datagridviewimagecolumn,C#,Datagridview,Draw,Paint,Datagridviewimagecolumn,我有一个Datagridviewdgv,假设我想手动影响的三列是: col1 : DataGridviewTextboxColumn, for displaying a number col2 : DataGridviewTextboxColumn, used as a color indicator, without text. BackColor will will be changed later. col3 : DataGridviewImageColumn 其他列与基础数据源各自

我有一个Datagridview
dgv
,假设我想手动影响的三列是:

col1 : DataGridviewTextboxColumn, for displaying a number

col2 : DataGridviewTextboxColumn, used as a color indicator, without text. BackColor will will be changed later.

col3 : DataGridviewImageColumn
其他列与基础
数据源
各自的
DataPropertyName
绑定。上面的3列未绑定到任何
DataPropertyName
,并且会受到手动影响,例如当我想要更改图像或颜色指示器时

每次影响
数据源
,我都会重新绑定数据源并
dgv.Invalidate()
,以更新网格的图形

  • 何时以及如何要求
    dgv
    考虑3个编辑列中的手动值?之前,我手动影响了
    dgv_CellPaint
    中的上述3列。它会起作用,但需要很长时间,我们决定将其移除。我试着把它们放在
    dgv_-Paint
    (我用来合并标题)中,但它既不采用颜色,也不采用图像
  • 使用CellPaint:行与行之间的矩形、填充背景、行与行之间的分隔符、图像和颜色框等。我指的3列是第一列(索引)、颜色和图像(框中)列。其他图像是不变的

    无CellPaint:无行和列分隔。通过将网格的单元格边框设置为水平,我创建了一个伪行分隔

  • 何时调用
    CellPainting
    Paint
    ?执行顺序及其区别是什么?我的粗略理解是,当单元格/网格“需要重新绘制”时,会调用它们。但我注意到它们被多次调用,不仅是在我调用
    Invalidate()
    时,甚至当我将鼠标悬停在网格区域上时

  • 谢谢大家。

    是的,你说得对,它经常被称为quie。如果您有性能问题,您可能希望尝试将操作限制到某些行和列。你在画展上做了什么/做了多少?也许可以优化?例如:尽可能多地调用内置方法将产生更好的性能,而不是一直使用drawstring等..是的,我尝试将CellPaint限制到最大值,只创建矩形(使行不相互接触),用彩色笔填充那些(遵循MDSN),其余的我称为e.PaintContent(e.CellBounds);避免使用拉丝、DrawImage等,即使这样也很慢。@TaW:你说的“如果就这些”是什么意思?那么,如果我想影响手动编辑的列,应该在什么时候完成?很抱歉,我看到了您的评论的早期版本,只包含e.PaintContent(e.CellBounds);``-现在事情看起来不一样了。。!嗯,有多少行和列?9列:4个图像列和5个文本列。在第4-5行开始显示滞后。基本上,当我水平调整winform任务窗格的大小时(这是Excel的winform任务窗格应用程序),网格需要时间才能完全绘制。