1

WinFormsアプリケーションにdatagridviewがあり、すべての列バー1を編集にロックしたい。これは、次のコードで実現できました。

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を完全にロック(読み取り専用)し、列Bの値がfalseの場合を除いて、列Cのデフォルトで編集できるようにします。したがって、上記の例では、value1とvalue3のみが編集可能です。

ただし、前述のように、読み取り専用をfalseに設定する条件で行をループすると、すべてがロックされるため、これを達成できないようです。

4

2 に答える 2

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;
    }
}
于 2012-08-16T10:56:56.760 に答える
2

問題だったのは次の行でした

row.ReadOnly = false;

に変更された場合

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

意図したとおりに機能します

于 2012-08-17T03:28:13.347 に答える