3

datagridviewいくつかのデータを表示する必要があります。データ間のいくつかの行はseparator rowsそうですreadonly。場合によっては、全体datagridviewreadonly。しかし、に戻すとreadonly = false、すべての行が編集可能になります。readonly各行のプロパティを手動で再設定しなくても、以前のように行が戻ってくる可能性はありますか?

4

3 に答える 3

4

Reflectorを使用して確認できる限り、toに設定DataGridView.ReadOnlyすると、グリッド内のすべての行と列に対してtrueも設定ReadOnlyされます。おそらく、後で再度設定する必要はないと想定されます。falseDataGridView.ReadOnlyfalse

したがって、これを回避するために私が見ることができる唯一の方法は、たとえば、に適切な値を設定し、これを使用して手動で状態DataGridViewRow.Tagを復元することにより、どの行を読み取り専用にするかを「記憶」することです。ReadOnly

たとえば、DataGridViewRow.Tagプロパティをtrue読み取り専用行に設定した場合DataGridView.ReadOnlyChanged、次のテストされていないコードのようなハンドラーを使用してイベントを処理できます。

void DataGridView_ReadOnlyChanged(object sender, EventArgs e)
{
    DataGridView dataGridView = (DataGridView) sender;
    if (!dataGridView.ReadOnly)
    {
        // DataGridView.ReadOnly has just been set to false, so we need to 
        // restore each row's readonly state.
        foreach(DataGridViewRow row in dataGridView.Rows)
        {
            if (row.Tag != null && ((bool)row.Tag))
            {
                row.ReadOnly = true;
            }
        }
    }
}

ただし、がそのプロパティをそのように切り替えることがDataGridViewできるように設計されていないことは明らかです。設定するReadOnly必要がないようにアプリケーションを設計できるかもしれません。DataGridView.ReadOnlytrue

たとえば、セルをダブルクリックしてユーザーが編集できないようにする場合は、に設定DataGridView.EditModeするDataGridViewEditMode.EditProgramatically代わりにに設定DataGridView.ReadOnlyできますtrue

于 2013-03-20T11:40:46.207 に答える
0

クラスを自分で実装する場合は、を設定DataGrid1.ReadOnly = trueして、ReadOnlyにする必要のあるプロパティをReadOnlyにすることができます。

このような:

string _myProperty;
public string MyProperty
{
   get{return _myProperty;}
}
于 2013-03-19T20:09:23.277 に答える
0

DataGridViewをデータソースにバインドするのではなく、手動でコードで入力する場合は、行を追加するときに、行の読み取り専用プロパティをtrueに設定するだけです。

上記が機能しない場合は、コードが実際に何をするのかわかりません。@ Dilshodのように、投稿するか、少なくともその要点にリンクすると便利だと言っています(http://www.gist .github.com)。

于 2013-03-19T20:35:22.120 に答える