【问题标题】:Read Only Columns & Rows in a DataGridViewDataGridView 中的只读列和行
【发布时间】:2012-08-16 10:09:40
【问题描述】:

我在 WinForms 应用程序中有一个 datagridview,我希望所有列栏都被锁定以进行编辑。我可以通过以下代码实现这一点:

foreach (DataGridViewColumn col in myGrid.Columns)
{
    if (col.Name == "LockedColumn")
    {
        col.ReadOnly = false;
    }
    else
    {
        col.ReadOnly = true;
    }
}  

但是,我还需要对该列进行条件锁定,具体取决于每行中其他位置的值。我尝试了以下代码:

foreach (DataGridViewRow row in myGrid.Rows)
{
    if ((bool)row.Cells["ConditionalColumn"].Value == false)
    {
        row.ReadOnly = false;
    }
    else
    {
        row.ReadOnly = true;
    }
}     

但是,这会锁定整个网格,这不是我想要的。通过表格示例,我所追求的可能会更清楚。

ColA ColB ColC

row1 真值1

row2 假值2

row3 真值3

我希望 A 列和 B 列全部锁定(只读),并且 C 列的默认值允许编辑,除非 B 列中的值为 false。因此,在上面的示例中,只有 value1 和 value3 是可编辑的。

但是我似乎无法实现这一点,因为如上所述,如果我循环遍历行并设置 readonly 为 false 的条件,所有内容都会被锁定。

【问题讨论】:

  • 这是您项目中的实际代码吗?您不能将 datagridview 单元格转换为 bool,因此不应编译此代码。也不是很清楚你的问题是什么。您是说当您将一行设置为只读时,整个网格将变为只读?这不会发生。
  • 为什么所有降价 - 我的问题到底有什么问题?
  • 我没有投反对票 - 人们对此感到惊讶,但也许非编译代码是原因。希望如果您发布项目中的实际代码,人们会删除反对意见。
  • 原始帖子已修改 - 我错过了代码中的 .Value

标签: c# datagridview


【解决方案1】:

您显示的代码不应编译,也未正确检查 DataGridView 中布尔单元格中的值。

如果您将代码更改为查看行类似于下面的代码,那么您应该能够根据列将各个行设置为只读:

foreach (DataGridViewRow row in myGrid.Rows)
{
    if (row.Cells["ConditionalColumn"].Value == null || (bool)row.Cells["ConditionalColumn"].Value == false)
    {
        row.ReadOnly = false;
    }
    else
    {
        row.ReadOnly = true;
    }
}

【讨论】:

    【解决方案2】:

    问题出在下面一行

    row.ReadOnly = false;
    

    什么时候改成

    row.Cells["colName"].ReadOnly = false;
    

    它按预期工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多