我有一个声明如下的属性:
public property FinalList as new BindingList(of Entity)
实体是通过实体框架创建的特定实体。我还有一个UltraGrid,其DataSource属性绑定到FinalList。
当程序加载时,它会根据某些规则将一堆来自EF DbSet的项添加到FinalList中。因为UltraGrid DataSource绑定到FinalList,所以网格会自动更新这些初始项。
UltraGrid设置为允许通过TemplateAddNewRow功能添加新行。这就是我的问题发生的地方。将行添加到网格中正确地将相同的新行添加到FinalList ...但由于FinalList源自EF DbSet的子集,我需要将这些新行添加到DbSet中,以便将更改发送到用户保存时的数据库。
最初,Datasource没有数据绑定到BindingList ...它只是设置为...但是列表的大小到了必须重新创建列表时发生某些事情导致屏幕的点太慢了...所以我改变了数据绑定。无论如何,我有一些用于预绑定的代码。
Private Sub grid_InitializeTemplateAddRow(sender As Object, e As InitializeTemplateAddRowEventArgs) Handles grid.InitializeTemplateAddRow
If e.TemplateAddRow.ListObject IsNot Nothing then
'do something to add the row to EF DbSet
End If
End Sub
此代码在绑定之前工作正常。现在,ListObject始终没有...所以这不起作用。还有一个属性
e.TemplateAddRow.IsAddNew
这也总是假的......所以我也不能使用它。
我怀疑问题在于,由于一切都已绑定,UltraGrid无法判断某些东西是否是新的...所以我认为我需要在它被添加到FinalList之前/之后立即拦截该行,而不是添加到网格中。根据IntelliSense,FinalList没有任何可以与之相关的事件。有什么想法吗?