我搜索过有关组合框的显示成员和价值成员,但我认为它们都不符合我的需要。
这是我的方案
我有两个表,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错了?
答案 0 :(得分:0)
您显示的所有代码都不会导致任何内容保存到数据库中。我假设您将emp201
表绑定到其他控件,包括ComboBox
。如果您希望将所选部门的Code
保存到另一条记录中,则需要将ComboBox
绑定到该记录。这看起来像这样:
cmb.DataBindings.Add("SelectedValue", myBindingSource, "department")
当您选择ComboBox
中的项目时,SelectedValue
属性将返回名称已分配给ValueMember
的列/属性中的值。