如何在VB NET中将0设置为DataBound TextBox的默认值

时间:2016-10-18 21:17:25

标签: c# vb.net data-binding

我正在使用一个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

0 个答案:

没有答案