Это немного сложнее, чем можно надеяться.
Вам нужно либо отслеживать цвета, которые вы устанавливаете для ячеек, либо сбрасывать все каждый раз.
Последний более надежный ИМО.
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;
}
Другие события также должны работать ..
Upddate:
Как отметил Джими, вместо сброса перед установкой в том же событии щелчка можно использовать событие CellLeave
в паре с событием CellEnter
, чтобы сделать то же самое. Кажется, работает нормально из моих тестов:
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;
}