0

これは、EF を使用した VB.NET winforms プロジェクトです。ComboBox は、列 tName および tNumber を含む別のデータソースにバインドされます。TName はその値の簡単な説明で、tNumber は Financial Table の transaction_type という名前の列の下に保存される実際の数値です。財務表にある既存のデータの表示では、すべてが問題なく機能します。

グリッド内の各項目のコンボボックスはすべて、transaction_type の正しい説明を示しています。しかし、コンボ ボックスの値を変更して保存ボタンをクリックしても、transaction_type に値が保存されません。

なぜこれが考えられるのでしょうか?不足しているコードは必要に応じて追加します..

form_load イベントは次のようになります。

    Private Sub paymentHistoryView_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    FinancialDataGridView.DataSource = db.financials.Where(Function(f) f.TenantId = tenentId).OrderBy(Function(f) f.transaction_date)
    TranstypeBindingSource.DataSource = db.transtypes.OrderBy(Function(f) f.tNumber)
    BindingNavigatorDeleteItem.Enabled = False

End Sub

また、savebutton クリック イベントは次のとおりです。

Private Sub FinancialBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles FinancialBindingNavigatorSaveItem.Click
    db.SaveChanges()
End Sub

ComboBox のプロパティを以下に示します。

コンボボックスのプロパティ

保存ボタンをクリックすると、データグリッドへの他のすべての変更が正しく保存されることに注意してください... さらにテストした後、ComboBox が選択されていない場合、値は実際に保存されます。回避策は、comboBox の値が変更された後に別のことに集中することだと思います。これが最善の方法のように思われる場合、データグリッドビューのコンボボックスの SelectedIndexChanged イベントをフックするにはどうすればよいですか?

4

1 に答える 1

1

チェックすると、保存ボタンをクリックする前にセルの外に移動しない場合、datagridviewの他の列でも同じことが実際に発生すると思います。良いニュースは、1行のコードを追加するだけでよいということです。

FinancialDataGridView.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange)

これで、SaveItem_Clickイベントハンドラーは次のようになります。

Private Sub FinancialBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles FinancialBindingNavigatorSaveItem.Click
    FinancialDataGridView.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange)
    db.SaveChanges()
End Sub

これにより、保存前にダーティセルがコミットされます。

https://stackoverflow.com/a/6469559/269123を参照してください

于 2012-09-14T07:05:18.897 に答える