如何在datagridview中以不同的方式突出显示行和当前单元格?
我将SelectionMode
设置为CellSelect
,并将MultiSelect
设置为False
。
我希望突出显示整个行,并以不同的颜色突出显示所选单元格。基本上是这样的:
我正在尝试通过以下代码使用CellEnter
事件:
dgvResult.SelectedRows[0].DefaultCellStyle.SelectionBackColor = Color.LightBlue;
dgvResult.SelectedCells[0].Style.SelectionBackColor = Color.Blue;
dgvResult.Refresh();
不幸的是,第一行似乎仅在Selection Mode
设置为FullRowSelect
时有效,而第二行仅在设置为CellSelect
时有效。
我在这里做什么错了?
答案 0 :(得分:2)
这比人们希望的要复杂一些。
您需要跟踪设置到单元格的颜色,或者每次都重新设置所有颜色。 后者是更可靠的imo。
DGV在DataGridViewSelectionMode.FullRowSelect
中。
注意:通过将DefaultCellStyle Color
设置为Color.Empty
可以完成重置。
示例:
private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0) return;
foreach ( DataGridViewRow row in dataGridView1.SelectedRows)
row.DefaultCellStyle.SelectionBackColor = Color.Empty;
foreach ( DataGridViewCell cell in dataGridView1.SelectedCells)
cell.Style.SelectionBackColor = Color.Empty;
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.SelectionBackColor = Color.RosyBrown;
dataGridView1[e.ColumnIndex, e.RowIndex].Style.SelectionBackColor = Color.LightSeaGreen;
}
其他事件也应该起作用。
更新日期:
正如Jimi所指出的那样,您可以使用与CellLeave
事件配对的CellEnter
事件来完成相同的操作,而不必在设置相同的Click事件之前进行重置。通过我的测试似乎可以正常工作:
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.SelectionBackColor = Color.RosyBrown;
dataGridView1[e.ColumnIndex, e.RowIndex].Style.SelectionBackColor = Color.LightSeaGreen;
}
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.Rows[e.RowIndex].DefaultCellStyle.SelectionBackColor = Color.Empty;
dataGridView1[e.ColumnIndex, e.RowIndex].Style.SelectionBackColor = Color.Empty;
}