C#
定石5: DataBindingCompleteで行単位ReadOnlyを維持
出典: WinForms DataGridView の編集モード完全ガイド — ReadOnly / EditMode / RowValidating の使い分け — 定石5: DataBindingCompleteで行単位ReadOnlyを維持
// ❌ NG: DataBound前にRows[i].ReadOnlyを設定(消える)
private void Form_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = LoadFromDb();
dataGridView1.Rows[0].ReadOnly = true; // ← DataBound完了前でRowsが空or再生成される
}
// ✅ OK: DataBindingCompleteイベントで設定
private void Form_Load(object sender, EventArgs e)
{
dataGridView1.DataBindingComplete += DataGridView1_DataBindingComplete;
dataGridView1.DataSource = LoadFromDb();
}
private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.IsNewRow)continue;
//業務ロジックで動的にReadOnlyを決める
var status = row.Cells["status"].Value?.ToString();
if (status == "確定済み")
{
row.ReadOnly = true; //確定済みの行は編集不可
}
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「定石5: DataBindingCompleteで行単位ReadOnlyを維持」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// ✅定石1: ReadOnlyの3層階層 //階層1:コントロール全体(最強・最もシンプル) dataGridView1.ReadOnly = true; dataGridView1.AllowUserToAddRows = false; //新規追加行も無効化未収録
定石1: ReadOnlyの3層階層—コントロール/列・行/セル
#548f6ae7bc2a
// ✅定石2: EditMode 4種類の挙動 // 1. EditOnEnter:セルにフォーカスが入った瞬間に編集モード(既定値: EditOnKeystrokeOrF2) dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;未収録
定石2: EditMode 4種類の使い分け—編集開始タイミング制御
#d2b3e420786d
// ✅定石3:編集イベントの3段階制御 // 1. CellBeginEdit:編集モードに入る直前 private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) {未収録
定石3: CellBeginEdit / CellEndEdit / RowValidatingの使い分け
#511ed36968b3
// ✅定石4: EditingControlShowingで数値のみ入力を強制 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (dataGridView1.CurrentCell?.OwningColumn.Name == "amount")未収録
定石4: EditingControlShowingでIME /数値制限を仕込む
#d9111a623822
