vb.net combobox displaymember保存到数据库而不是valuemember

时间:2018-03-22 02:40:12

标签: vb.net

我搜索过有关组合框的显示成员和价值成员,但我认为它们都不符合我的需要。

这是我的方案

我有两个表,emp201和department_misc

emp201包含empno,name,department等 department_misc包含代码,描述。

这是我填写组合框的代码:

    Public Sub Auto1(ByVal cmb As ComboBox, ByVal strTbl As String)
            Dim locDa As New DataSet
            rs = cn.Execute("SELECT Code, Description FROM " & strTbl)
            locDaOle.Fill(locDa, rs, strTbl)
            cmb.DisplayMember = "department"
            cmb.ValueMember = "Code"
            cmb.DataSource = locDa.Tables(strTbl)
    End Sub

之后,这是我使用bindingsource

进行绑定的代码
Public Sub bindControls(ByVal fFormName As Form, ByVal strFormName As String, ByVal strTable As String)

    Dim ctrl As Control
    Try
        ds = New DataSet()
        sda = New OleDbDataAdapter("SELECT * FROM " + strTable, oleDBConn)
        sda.Fill(ds)
        bsSource = New BindingSource()
        bsSource.DataSource = ds.Tables(0)
        sda.Fill(ds, strTable)

        For Each ctrl In fFormName.Controls
            If ctrl.AccessibleName = "" Then Continue For
            If (ctrl.GetType() Is GetType(TextBox)) Or _
                (ctrl.GetType() Is GetType(ComboBox)) Then
                ctrl.DataBindings.Clear()
                ctrl.DataBindings.Add(New Binding("Text", bsSource, ctrl.AccessibleName)) 


            ElseIf (ctrl.GetType() Is GetType(CheckBox)) Then
                ctrl.DataBindings.Clear()
                ctrl.DataBindings.Add(New Binding("Checked", bsSource, ctrl.AccessibleName))
                MAINFORM.BindingNavigator1.BindingSource = bsSource

            End If
        Next
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

我使用accessiblename将字段存储在数据库中,因为.net中的数据字段不可用。

然后在使用bindingsource绑定组合框后,它可以工作,但是当我浏览保存到数据库的数据时,它保存了显示成员。有没有办法可以保存代码而不是描述?或者我使用displaymember和valuemember错了?

1 个答案:

答案 0 :(得分:0)

您显示的所有代码都不会导致任何内容保存到数据库中。我假设您将emp201表绑定到其他控件,包括ComboBox。如果您希望将所选部门的Code保存到另一条记录中,则需要将ComboBox绑定到该记录。这看起来像这样:

cmb.DataBindings.Add("SelectedValue", myBindingSource, "department")

当您选择ComboBox中的项目时,SelectedValue属性将返回名称已分配给ValueMember的列/属性中的值。