我保证我已经看过声称这个问题的bazillion帖子,所以请原谅我,我仍然难倒。VB.net DataRow.RowState不会更新
我有一个包含强类型数据集的VS2008智能设备项目。用户可以输入值并保存,每次在数据集中创建新记录。如果用户希望编辑值,则会显示一个模态子窗体,并带有多个组合框,其中包含可接受输入的可能值以编辑该行。每个组合框都以下面的方式绑定在子窗体的构造函数中:
With cmbSize
.DataSource = frmMain.dstConfig.Sizes
.DisplayMember = "Display"
.ValueMember = "Value"
.DataBindings.Add("SelectedValue", trowNewRow, "SIZE", True, DataSourceUpdateMode.OnPropertyChanged)
End With
dstConfig是包含约束的表的数据集。绑定到源代码的显示和值成员工作正常。
trowNewRow是对用户启动编辑过程时从主窗体传递的数据集中的行的引用,通过将该行作为参数“ByRef”传递给子窗体。强打字被保存下来。在我看来,可能会出现某种断开,我不知道这种情况何时发生。我通过对数据集执行“选择”过程并通过与要编辑的行对应的唯一ID字段进行过滤来传递参考。结果是与数据集相同模式的强类型行的单项数组,其中第一个(也是唯一)项作为我的对象传递。
用户通过单击确定按钮提交更改后,会触发过程以评估是否实际执行了更改。我认为这样做的最好方法是检查trowNewRow的RowState。但是,无论更改如何,RowState都会保持“添加”状态。手动检查行的值表示更改确实已记录。我已验证trowNewRow的AcceptChanges过程没有被我的任何代码明确地调用。
我曾尝试以下: 1)调用trowNewRow 的EndEdit中方法2)手动执行上调用的组合框BindingManagerBase的EndCurrentEdit过程的组合框 3.)一个WriteValue对象 4。 )上述各项组合
预先感谢您的任何想法或解决方案。
代替这两个长段落的相关代码可能会更好地说明问题并减少乏味。如果行状态是已添加,则表示dataadapter尚未更新数据库。由于它是一个新的行,所以在你保存之前它仍然是一个新的行(不管有多少编辑/改变)。 – Plutonix