DataGridView:以不同的方式突出显示单元格和行

时间:2018-09-02 12:46:05

标签: c# datagridview

如何在datagridview中以不同的方式突出显示行和当前单元格? 我将SelectionMode设置为CellSelect,并将MultiSelect设置为False

我希望突出显示整个行,并以不同的颜色突出显示所选单元格。基本上是这样的: enter image description here

我正在尝试通过以下代码使用CellEnter事件:

dgvResult.SelectedRows[0].DefaultCellStyle.SelectionBackColor = Color.LightBlue;
dgvResult.SelectedCells[0].Style.SelectionBackColor = Color.Blue;
dgvResult.Refresh();

不幸的是,第一行似乎仅在Selection Mode设置为FullRowSelect时有效,而第二行仅在设置为CellSelect时有效。

我在这里做什么错了?

1 个答案:

答案 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;
}