数据网格视图:限制用户不选择某些单元格

时间:2015-04-02 11:23:44

标签: c# datagridview

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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. */
  }
}

这仍然允许用户选择已加载的单元格,但逻辑检查将阻止颜色更改,而ReadOnly将阻止用户值更改单元格。