只读列& DataGridView中的行

时间:2012-08-16 10:09:40

标签: c# datagridview

我在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 true value1

row2 false value2

row3 true value3

我想要专栏A& B完全锁定(只读),Col C的默认值允许编辑,除非B列中的值为false。因此,在上面的示例中,只有value1和value3可以编辑。

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

2 个答案:

答案 0 :(得分:3)

您显示的代码不应该编译,也不能正确检查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;
    }
}

答案 1 :(得分:1)

以下是问题

row.ReadOnly = false;

更改为

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

按预期工作