C# 只读列&;DataGridView中的行

C# 只读列&;DataGridView中的行,c#,datagridview,C#,Datagridview,我在WinForms应用程序中有一个datagridview,我希望除一列之外的所有列都被锁定以进行编辑。我能够通过以下代码实现这一点: foreach (DataGridViewColumn col in myGrid.Columns) { if (col.Name == "LockedColumn") { col.ReadOnly = false; } else { col.ReadOnly = true; }

我在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;
    }
}     
但是,我还需要对该列使用条件锁,这取决于每行中其他位置的值。我尝试了以下代码:

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;
    }
}     
然而,这锁定了整个网格,这不是我想要的。通过一个表格示例,我想要的可能更清楚

可乐

行1真值1

第2行错误值2

第3行真实值3

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


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

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

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

问题出在下面这一行

row.ReadOnly = false;
当更改为

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

它按预期工作

问题出在下面一行

row.ReadOnly = false;
当更改为

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

它按预期工作

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