这是一个使用EF的VB.NET winforms项目。 ComboBox绑定到一个单独的数据源,其中包含colums 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
保存按钮点击事件如下:
Private Sub FinancialBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles FinancialBindingNavigatorSaveItem.Click
db.SaveChanges()
End Sub
ComboBox的属性如下所示:
应该注意,当单击保存按钮时,对数据网格的所有其他更改都会正确保存...进一步测试后,如果不再选择ComboBox,则实际将保存该值。我想在更改comboBox的值之后,可以将注意力集中在其他方面。如果这似乎是最好的方法,我将如何为datagridview中的comboBoxs挂钩SelectedIndexChanged事件???
答案 0 :(得分: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
这将在保存之前提交脏单元格。