我正在使用一个bindingsource,其datasource设置为从数据库加载的Datatable。数据库中integer和float的列的默认值分配为0.查询返回0或这些列的实际值。
我有几个文本框绑定到整数列,还有浮点列。 绑定到浮点列的我的文本框在有0值时显示0。当值为0时,我的整数文本框显示EMPTY。我希望它显示0。
编辑对于向下投票和投票结束。 我已经看到SO处理这个问题的例子 - 有些人声明将它设置在数据表中 - 我在我的代码中使用了这个例子并且它没有改变结果 - 我在文本框中输入零并且框变为空白,我输入1并且它需要它。我知道这个问题与它的内容有关。它是一个Integer类型,它不是真的可以为空 - 我知道你可以。那么为什么当我输入0时,该框变为空白,但如果我输入1则保持不变。我知道无论是0还是其他任何值都会更新。但为什么Single和Integer之间存在差异? Single Works使用相同的Exact代码,Integer没有。请解释。 我在这里和其他地方读过。 How to set default values for data bound controls for addition in VB.NET
修改 我可以使用单个值将值1.25粘贴到我的文本框中,并且它可以工作,但是我无法键入1.25的值,当我按小数点时,光标会自动移回到第一个字符位置。
我不确定为什么会这样 - 我确实从文本更改事件更新源代码。当我输入文本框IsEditing = True时,我设置了一个标志。因此,文本更改事件仅在用户输入文本框时有效。我不明白为什么会发生这种情况 - 我知道这是在数据绑定中,但我不知道要改变什么来修复它。
我的相关代码是。
Private Sub LoadTable()
dtBins = DatabaseFetch
SetDefaults()
AddBindings()
End Sub
Private Sub SetDefaults
Dim columnDefs As String() = New String()
{"Fill_Part", "Fill_Pulse", "Fill_Fails", "Fill_Value"}
For i As Integer = 0 To columnDefs.Length - 1
If dtBins.Columns.Contains(columnDefs(i)) Then
dtBins.Columns.Item(columnDefs(i)).DefaultValue = 0
End If
Next
End Sub
Private AddBindings()
bindingtxtFillPulse = New System.Windows.Forms.Binding("Text",
bsBins,
"Fill_Pulse",
True,
DataSourceUpdateMode.OnPropertyChanged)
bindingtxtFillPulse.NullValue = 0
bindingtxtFillPulse.DataSourceNullValue = 0
Me.txtFillPulse.DataBindings.Add(bindingtxtFillPulse)
End Sub