C# Datagrid视图:限制用户不选择某些单元格

C# Datagrid视图:限制用户不选择某些单元格,c#,datagridview,C#,Datagridview,我有一个datagrid视图,其中每个单元格都是布尔值,当用户单击单元格时,我将其保存为true,否则保存为false。 此外,当用户点击单元格时,它的颜色会变为蓝色,如果他再次点击同一单元格,它的颜色会变为红色。 我将这些布尔值保存在数据库中,稍后检索这些值并填充单元格 保存后,所有这些单元格都变为灰色。 我希望以这样的方式划分我的datagrid视图,即从数据库中填充的单元格(用户最后选择的单元格)将变得不可点击,而其他未填充的单元格应保持可点击状态。 现在以前保存的值在填充单元格时,用户可

我有一个datagrid视图,其中每个单元格都是布尔值,当用户单击单元格时,我将其保存为true,否则保存为false。 此外,当用户点击单元格时,它的颜色会变为蓝色,如果他再次点击同一单元格,它的颜色会变为红色。 我将这些布尔值保存在数据库中,稍后检索这些值并填充单元格

保存后,所有这些单元格都变为灰色。 我希望以这样的方式划分我的datagrid视图,即从数据库中填充的单元格(用户最后选择的单元格)将变得不可点击,而其他未填充的单元格应保持可点击状态。
现在以前保存的值在填充单元格时,用户可以单击它,它将从默认颜色更改为蓝色(即selected==True)。我希望限制用户,使其无法选择这些单元格。

您可以通过处理
DataGridView
CellStateChanged
事件来完成此操作:

private void dataGridView1_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
    if (...)
    {
        e.Cell.Selected = false;
    }
}

另一个选项是从数据库加载单元格时,将这些单元格设置为
ReadOnly
。然后,您只需在
单元格中添加一个条件,然后单击执行颜色更改的逻辑

foreach (bool value in /* values loaded from the database */ )
{
  var cell = this.dataGridView1.Rows[rowToLoad].Cells[columnToLoad];
  cell.Value = value;
  cell.ReadOnly = true;
}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
  if (!this.dataGridView1.CurrentCell.ReadOnly)
  {
    /* Your color logic. */
  }
}
这仍然允许用户选择加载的单元格,但逻辑检查将阻止颜色更改,而
只读
将阻止用户更改单元格值