我有一个 vb.net 2010 表单,其中包含来自绑定导航器导航的数据集中两个表中的 22 个数据绑定控件。这成功地添加了删除和更新。但是,我需要的是在添加新记录时,我需要预先填写一些字段。更具体地说,我有积分余额字段等,它们可以是任何值,但在新客户上通常为 0,所以我想在添加新记录时将它们初始化为 0。
我AddingNew
在我的数据源上找到了一个事件,但是在添加新项目之前调用了这个事件,因此我的所有初始化都丢失了。
对此的任何帮助将不胜感激。亲切的问候费尔多
我有一个 vb.net 2010 表单,其中包含来自绑定导航器导航的数据集中两个表中的 22 个数据绑定控件。这成功地添加了删除和更新。但是,我需要的是在添加新记录时,我需要预先填写一些字段。更具体地说,我有积分余额字段等,它们可以是任何值,但在新客户上通常为 0,所以我想在添加新记录时将它们初始化为 0。
我AddingNew
在我的数据源上找到了一个事件,但是在添加新项目之前调用了这个事件,因此我的所有初始化都丢失了。
对此的任何帮助将不胜感激。亲切的问候费尔多
由于您使用的是 DataTables,因此您可以手动设置DefaultValue
DataColumn 的属性:
Dim dt As New DataTable
Dim dc As New DataColumn("test", GetType(String))
dc.DefaultValue = "hello"
dt.Columns.Add(dc)
dt.Rows.Add()
Debug.WriteLine(dt.Rows(0)("test").ToString)
结果:你好
答案包括多个链接表解决方案:
就像 LarsTech 说的那样使用
dataset.table.Columns.Item("someField").DefaultValue = someValue
如果您有一个标准默认值,它会很好地工作,但它也适用于生成的默认值,如果您在保存到下一个值时重置此默认值(如果进行了新添加)。但是,如果您使用数据集作为无法生成子表记录的数据源(例如在我的情况下,仅在使用数据库触发器链接所有不同类型的帐户进行保存时才会生成帐户 ID),您仍然可以为其他字段设置默认值,来自兄弟(或不存在的父)表的字段,但
dataset.siblingTable.Columns.Item("someField").DefaultValue = someValue
将不起作用,因为绑定导航器仅生成第一个同级,并且在触发之前不会生成父级。但是,在BindingSource.PositionChanged
通过单击添加生成的绑定源事件中,您可以自由地将默认值放入屏幕上的实际控件中,并且它们不会被空值覆盖,显然您需要限制这一点,因此只有在用户按下添加时才会发生通过在添加按钮的事件中添加一个变量来Clicked
告诉您何时单击添加并在保存或回滚时重置此变量。也可以修改具有 if null 或空默认值的绑定本身。
希望这对其他人有帮助:)
在 BindingNavigator 中的“添加行”按钮上使用 MouseUp 事件,而不是“单击”事件。这是因为在单击事件完成之后,datagridview 中不存在新的 ROW。
Private Sub BindingNavigatorAddNewItem_MouseUp(sender As Object, e As MouseEventArgs) Handles BindingNavigatorAddNewItem.MouseUp
'works with add row from the binding navigator
myDataGridView.Item(3, myDataGridView.CurrentRow.Index).Value = txtDefaultDescrip.Text.Trim
End Sub
直接在 DataGridView 中添加数据时做同样的事情。
Private Sub myDataGridView_DefaultValuesNeeded(sender As Object, e As DataGridViewRowEventArgs) Handles myDataGridView.DefaultValuesNeeded
'works with add row inside a datagridview
e.Row.Cells(3).Value = txtDefaultDescrip.Text.Trim
End Sub
在此示例中,我的 from 上显示了一个可编辑的默认值。如果您有一个不变的默认值(例如,第 3 列始终为 1),那么您应该在设置数据源时这样做。