0

这是一个使用 EF 的 VB.NET winforms 项目。ComboBox 绑定到一个单独的数据源,其中包含列 tName 和 tNumber。TName 是该值的简要描述,tNumber 是保存在财务表中名为 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,该值将实际保存。我想解决方法是在组合框的值更改后专注于其他事情。如果这似乎是最好的方法,我将如何挂钩 Datagridview 中组合框的 SelectedIndexChanged 事件???

4

1 回答 1

1

我认为,如果您检查,如果您在单击保存按钮之前没有移出单元格,那么 datagridview 中的其他列实际上会发生同样的事情。好消息是您只需要添加一行代码。

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 回答