DataGridView 中的只读列和行

问题描述 投票:0回答:3

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

行1真值1

行2假值2

第3行真值3

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

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

c# datagridview
3个回答
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;
    }
}

2
投票

问题出在以下几行

row.ReadOnly = false;

更改为

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

它按预期工作


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.