これには簡単な答えがあると確信していますが、私の人生ではそれを見ることができません。
DataTable にバインドされた DataGridView があります。セルの 1 つにかなり長い文字列を含めることができるので、DataGridView の CellDoubleClick で開くエディター ダイアログ ウィンドウ (検証なども行う) を作成しました。ユーザーがエディター ダイアログで [OK] をクリックすると、値がセルに入力されます。
これは、既に DataGridView に追加されているセルである限り正常に機能しますが、「新しい行を追加」(DataGridViewRow.IsNewRow が true) で実行すると、ダイアログが閉じられたときに二重の問題が発生します。行が編集モードであり、その後新しい行を追加できない場合を除き、編集された文字列は表示されません。
私が見ることができる1つの潜在的な解決策は、ダイアログウィンドウを開く前に、新しい行が基礎となるソースに追加されることを確認することですが、それを行うエレガントな方法がわかりません(DataGridView.EndEdit()はそれを行いません)。それで、それを行うためのきちんとした方法はありますか(または、より良い解決策がありますか)?
コードは次のようになります。
void DataGridViewCellCoubleClick(object sender, DataGridViewCellEventArgs e){
DataGridView gridview = (DataGridView)sender;
gridview.EndEdit();
EditForm editForm = new EditForm(gridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
if(editForm.ShowDialog() == DialogResult.OK){
gridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = editForm.StringResult;
}
}
編集:
私が必要とするものを達成する解決策を見つけました:
電話する前に:
DataGridView.EndEdit()
また、現在の行が「IsNewRow」であることを確認し、そうである場合は使用します
DataGridView.NotifyCurrentCellDirty(true)
編集ウィンドウを開く前に追加します。それが誰かを助けることを願っています。