【发布时间】:2015-12-15 19:17:34
【问题描述】:
我有一个带有复选框列和一些文本列的 DataGridView,我希望任何选中其复选框列的行都具有不同的背景色。我使用 CellValueChanged 事件根据需要突出显示单元格,这工作得很好,除了在某些情况下格式不正常。
如果我在网格中添加 10 行,并按复选框列按降序排序(选中的行位于顶部),然后选中前 5 行中的复选框,它们都会被突出显示。但是,如果我随后取消选中中间的一个(假设是第二行),则 CellValueChanged 事件会按预期触发,这会取消突出显示第二行。然后,当我离开该行并选择另一行时,列排序开始并将第 2 行向下推,现在它是第 5 行,这也是正确的。
问题是排序发生在格式化之后,所以旧的行样式现在应用于该位置的任何行。在图片中显示可能更容易。顶部屏幕截图显示了正确的设置,然后我取消选中以“144”结尾的 # 行并切换到最后一行。结果是 144 从第 2 行移动到第 5 行,现在第 2 行具有“未突出显示”样式,即使数据行已选中该框:
一些补充信息:我允许用户通过单击它来选中该框,或者他们也可以多选行并点击空格键来切换复选框。当我切换复选框时,我将 DataGridViewCell 对象的 Value 属性设置为 true 或 false。
无论如何,我正在尝试一种解决此 UI 问题的好方法,而无需每次都循环遍历网格中的每一行,这似乎非常低效。有什么想法吗?
【问题讨论】:
-
非常好——我只是将格式化方法移到了 RowPostPaint 事件中,现在它的效果要好得多,并且可以捕捉到以前错过的所有各种场景。您想添加相同的链接/评论作为答案而不是评论吗?
-
欢迎您的朋友,很高兴这对您有所帮助。我不认为仅仅提供一个链接就应该是一个答案,但感谢您的提议!
标签: c# checkbox datagridview