DataGridView - 在单击其他单元格时保持单元格选择

时间:2015-03-10 19:04:14

标签: c# winforms visual-studio-2012 datagridview

当我选择单元格时,我正在改变它的颜色,但是当用户点击/选择一个单元格时,我需要更改颜色,如果用户单击另一个单元格(在同一行中),则新单元格和前一个单元格都会被选中两个单元格的颜色和颜色变化,如果用户再次单击第一个单元格,则它将被取消选中,只有第二个单元格被更改为颜色。

这是我的代码:

 private void dataGridView1_CellClick(object sender,
   DataGridViewCellEventArgs e)
{
    List<DataGridViewRow> rowCollection = new List<DataGridViewRow>();



    foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
    {
        rowCollection.Add(dataGridView1.Rows[cell.RowIndex]);

    }




    foreach (DataGridViewRow row in rowCollection)
    {

            dataGridView1.Rows[row.Index].DefaultCellStyle.SelectionBackColor = Color.Pink;


    }

}

现在,当我选择一些单元格时,颜色会发生变化,但当我移动到其他单元格并选择它时,之前选择的单元格会被取消选择,其更改的颜色会恢复为默认颜色。

2 个答案:

答案 0 :(得分:0)

也许这会做你想要的......:

private void DGV_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
    DataGridViewCell cell = DGV[e.ColumnIndex, e.RowIndex];
    cell.Selected = !cell.Selected;
    cell.Style.BackColor = cell.Selected ? Color.Pink : Color.White;
}

但它确实取决于你想要的是什么:如果你想在SelectedCells集合中添加和删除,那么着色单元格没有意义,因为它们总是具有SelectionColor。如果你想维护你自己的选定或有色单元格的集合,你需要将代码更改为:

List<DataGridViewCell> coloredCells = new List<DataGridViewCell>();

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{

    DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];
    if (coloredCells.Contains(cell) ) coloredCells.Remove(cell);
    else coloredCells.Add(cell);
    cell.Style.BackColor = coloredCells.Contains(cell) ? Color.Pink : Color.White;
}

要删除蓝色选项,您可以使用此选项:

private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    dataGridView1.ClearSelection();
}

请注意,所有这些并不完全符合用户的期望,如果他们可以点击内容进行编辑,则可能会干扰..

答案 1 :(得分:0)

//检查颜色是否变为粉红色。

foreach(rowCollection中的DataGridViewRow行)     {          if(dataGridView1.Rows [row.Index] .DefaultCellStyle.SelectionBackColor == Color.Pink)                 dataGridView1.Rows [row.Index] .DefaultCellStyle.SelectionBackColor = Color.White;           其他                 dataGridView1.Rows [row.Index] .DefaultCellStyle.SelectionBackColor = Color.Pink;     }