我在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的条件循环遍历行,则所有内容都将被锁定。
答案 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;
按预期工作