datagridview
いくつかのデータを表示する必要があります。データ間のいくつかの行はseparator rows
そうですreadonly
。場合によっては、全体datagridview
がreadonly
。しかし、に戻すとreadonly = false
、すべての行が編集可能になります。readonly
各行のプロパティを手動で再設定しなくても、以前のように行が戻ってくる可能性はありますか?
3 に答える
Reflectorを使用して確認できる限り、toに設定DataGridView.ReadOnly
すると、グリッド内のすべての行と列に対してtrue
も設定ReadOnly
されます。おそらく、後で再度設定する必要はないと想定されます。false
DataGridView.ReadOnly
false
したがって、これを回避するために私が見ることができる唯一の方法は、たとえば、に適切な値を設定し、これを使用して手動で状態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.ReadOnly
true
たとえば、セルをダブルクリックしてユーザーが編集できないようにする場合は、に設定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)。