2

これには簡単な答えがあると確信していますが、私の人生ではそれを見ることができません。

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)

編集ウィンドウを開く前に追加します。それが誰かを助けることを願っています。

4

1 に答える 1

0

問題は、データ テーブルをデータ GridView にバインドする方法にあると思います。

バインディング ソースを作成し、その Datasource を DataTable に設定します。次に、Datagrid View のデータ ソースをバインディング ソースとして設定します。

Datagrid View に新しい行を追加するときは、データ テーブルに新しい行を作成してから、Datatable を更新します。

これらの変更は両方とも Binding ソースによってバインドされているため、Datagrid ビューに反映されるはずです。

于 2012-04-16T12:58:03.467 に答える