ComboBox中的值是从数据库中读取的
数据库表中包含name和id两个字段,ComboBox显示的是name的内容,但之后我要保存的是name对应的id,而不是name文本
谢谢
用collection缓存
保存name的同时可以Combo1.ItemData(Combo1.NewIndex)=id
写一个过程
Name转换ID
Public Function mGetID(ByVal mStr As String) As Long
On Error GoTo mErr
Dim mRst As New ADODB.Recordset
mRst.Open "SELECT * FROM 表 WHERE Name=" & mStr & "", mConnectstring, adOpenKeyset, adLockOptimistic, adCmdText
If mRst.BOF And mRst.EOF Then
mGetID = 0
Else
mGetID = mRst("Id")
End If
mRst.Close
Set mRst = Nothing
Exit Function
mErr:
MsgBox Err.Number & "," & Err.Description, vbCritical, mTitle
End Function
保存时:mGetID
Combo1.Item存name
Combo1.ItemData存id
用ItemData寸放id,并且Sorted 属性设为 False。
Option Explicit
Private Sub Form_Load()
List1.AddItem "张三" Name字段
List1.ItemData(List1.ListCount - 1) = 3 ID字段
List1.AddItem "李四"
List1.ItemData(List1.ListCount - 1) = 4
List1.AddItem "王五"
List1.ItemData(List1.ListCount - 1) = 5
List1.AddItem "赵六"
List1.ItemData(List1.ListCount - 1) = 6
End Sub
Private Sub Command2_Click(Index As Integer)
Select Case Index
Case 0 将左列表框选种项目移到右列表框
For i = List1.ListCount - 1 To 0 Step -1
If List1.Selected(i) Then
List2.AddItem (List1.List(i))
List2.ItemData(List2.ListCount - 1) = List1.ItemData(i)
List1.RemoveItem (i)
End If
Next
Case 1 将右列表框选种项目移到左列表框
For i = List2.ListCount - 1 To 0 Step -1
If List2.Selected(i) Then
List1.AddItem (List2.List(i))
List1.ItemData(List1.ListCount - 1) = List2.ItemData(i)
List2.RemoveItem (i)
End If
Next
Case 2 将左列表框全部项目移到右列表框
For i = List1.ListCount - 1 To 0 Step -1
List2.AddItem (List1.List(i))
List2.ItemData(List2.ListCount - 1) = List1.ItemData(i)
List1.RemoveItem (i)
Next
Case 3 将右列表框全部项目移到左列表框
For i = List2.ListCount - 1 To 0 Step -1
List1.AddItem (List2.List(i))
List1.ItemData(List1.ListCount - 1) = List2.ItemData(i)
List2.RemoveItem (i)
Next
End Select
End Sub
Private Sub Command1_Click()
将选种的人员ID列出来,这就是你想要的东西
For i = 0 To List2.ListCount - 1
Debug.Print List2.ItemData(i)
Next i
End Sub
Private Sub List1_Click()
Debug.Print "ID:" & List1.ItemData(List1.ListIndex), "姓名:" & List1.Text
End Sub
Private Sub List2_Click()
Debug.Print "ID:" & List2.ItemData(List2.ListIndex), "姓名:" & List2.Text
End Sub