DataGridView单元格设置BackColor后未即时刷新问题求助
解决DataGridView单元格背景色即时刷新问题
问题根源在于:当CellClick事件触发时,目标单元格处于激活/编辑状态,此时DataGridView会使用激活状态的默认绘制逻辑覆盖你设置的Style.BackColor,直到单元格失去焦点才会应用自定义样式。仅调用Refresh()或Update()无法强制重绘当前激活的单元格。
修复后的代码
private void DGV_CellClick(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = sender as DataGridView; int rowIndex = e.RowIndex, colIndex = e.ColumnIndex; // 排除表头行(表头行索引为-1) if (colIndex == 1 && rowIndex >= 0) { ColorDialog dialog = new ColorDialog(); if (dialog.ShowDialog() == DialogResult.OK) { // 结束单元格编辑状态,释放激活锁定 dgv.EndEdit(); // 设置单元格背景色 dgv.Rows[rowIndex].Cells[colIndex].Style.BackColor = dialog.Color; // 强制重绘目标单元格 dgv.Rows[rowIndex].Cells[colIndex].Invalidate(); } } }
关键改动说明
- 添加
rowIndex >= 0判断:避免点击表头时触发无效逻辑 - 调用
dgv.EndEdit():结束单元格的编辑/激活状态,让自定义样式可以覆盖默认绘制 - 调用
单元格.Invalidate():强制DataGridView立即重绘该单元格,即时显示新背景色
如果上述方法仍有异常,可以尝试通过切换焦点强制刷新:
// 设置完背景色后添加以下代码 dgv.CurrentCell = null; dgv.CurrentCell = dgv.Rows[rowIndex].Cells[colIndex];
内容的提问来源于stack exchange,提问作者Parker Shiung
相关产品推荐
相关产品推荐

