datagridviewいくつかのデータを表示する必要があります。データ間のいくつかの行はseparator rowsそうですreadonly。場合によっては、全体datagridviewがreadonly。しかし、に戻すとreadonly = false、すべての行が編集可能になります。readonly各行のプロパティを手動で再設定しなくても、以前のように行が戻ってくる可能性はありますか?
3 に答える
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。
クラスを自分で実装する場合は、を設定DataGrid1.ReadOnly = trueして、ReadOnlyにする必要のあるプロパティをReadOnlyにすることができます。
このような:
string _myProperty;
public string MyProperty
{
get{return _myProperty;}
}
DataGridViewをデータソースにバインドするのではなく、手動でコードで入力する場合は、行を追加するときに、行の読み取り専用プロパティをtrueに設定するだけです。
上記が機能しない場合は、コードが実際に何をするのかわかりません。@ Dilshodのように、投稿するか、少なくともその要点にリンクすると便利だと言っています(http://www.gist .github.com)。