C# C DataGridView-正确处理有条件的、基于值的行样式

C# C DataGridView-正确处理有条件的、基于值的行样式,c#,checkbox,datagridview,C#,Checkbox,Datagridview,我有一个带有复选框列和一些文本列的DataGridView,我希望选中复选框列的任何行都有不同的背景色。我使用CellValueChanged事件来根据需要突出显示单元格,这工作得相当好,只是在某些情况下格式会出错 如果我向网格中添加10行,然后按复选框列按降序排序顶部的选中行,然后选中前5行中的复选框,它们都会很好地高亮显示。但是,如果我取消选中中间的一行,假设CellValueChanged事件按预期触发第二行,它取消高亮显示第二行。然后,当我离开该行并选择另一行时,列排序开始并向下推第2行

我有一个带有复选框列和一些文本列的DataGridView,我希望选中复选框列的任何行都有不同的背景色。我使用CellValueChanged事件来根据需要突出显示单元格,这工作得相当好,只是在某些情况下格式会出错

如果我向网格中添加10行,然后按复选框列按降序排序顶部的选中行,然后选中前5行中的复选框,它们都会很好地高亮显示。但是,如果我取消选中中间的一行,假设CellValueChanged事件按预期触发第二行,它取消高亮显示第二行。然后,当我离开该行并选择另一行时,列排序开始并向下推第2行,因此现在是第5行,这也是正确的

问题是排序发生在格式化之后,因此旧的行样式现在应用于该位置的任何行。在图片中显示可能更容易。顶部的屏幕截图显示了正确的设置,然后我取消选中以144结尾的行,并切换到最后一行。结果是144从第2行移动到第5行,现在第2行具有未高亮显示的样式,即使数据行已选中该框:

一些补充信息:我允许用户点击复选框,或者他们也可以多选行并点击空格键来切换复选框。切换复选框时,我将DataGridViewCell对象的Value属性设置为true或false


不管怎么说,我正试图想出一个解决这个UI问题的好方法,而不是每次都循环遍历网格中的每一行,这看起来真的很低效。有什么想法吗?

为了结束这个问题,Ivan Stoev在评论中提供的链接指的是各种绘画活动,可以让你定制这种行为。虽然我实际上没有自定义绘制逻辑本身,但事件在正确的时间触发,它们只针对可见行触发,因此,我可以简单地将格式设置方法移动到RowPostPaint事件中。

非常好-我简单地将格式设置方法移动到RowPostPaint事件中,它现在工作得更好了,可以捕获以前错过的所有场景。你想添加相同的链接/评论作为答案而不仅仅是评论吗?你欢迎mate,很高兴这对你有所帮助。我不认为仅仅提供一个链接就应该是一个答案,但是谢谢你的建议!