我有一个返回以下列的查询:
代码
姓氏
FirstName
我有一个组合框,其中所有这些信息都显示在下拉列表中。但是当我选择一行时,我在组合框中看到的只是代码(它是一个员工编号)。我想做的是显示:
“[Code] - [LastName],[FirstName]”
作为选择值时的选定项目,并且仍然只将[代码]存储在组合框的.Value属性中。
这是怎么做到的?我已经习惯了C#.NET,其中下拉列表有2个属性(displayValue和selectedValue)。
答案 0 :(得分:8)
1。在此方法中,您将无法使用格式(短划线或逗号):
将列数设置为3 将Bound列设置为1(它是基于1的,即使.Column属性从零开始) 将色谱柱宽度调整到令人满意的排列 将RowSourceType设置为“Table / Query” 将RowSource设置为您的查询 不设置一个控制源(留空 - 这会使.Value从基础数据中解除绑定)。
您可以在设计视图中执行以上所有操作。
2。这种方法更有效,但完全符合您的要求:
在设计视图中:
将列数设置为2
将绑定列设置为1,
SetColumn Widths为0";2"
(接受英寸或厘米,如果您只输入未修饰的数字,则将其读作英寸(或选项(?)中设置))。
将RowSourceType设置为“值列表”
不设置一个控制源(留空 - 这会使.Value从基础数据中解除绑定)。
编写此代码:
Private Sub Form_Load()
'declare variables & open query as recordset--left as exercise
With Combo1
.Clear
Do Until rs.EOF
.AddItem rs.Code & ";" & rs!Code & " - " & rs!LastName & ", " & rs!FirstName
rs.MoveNext
Loop
End With
'close rs & clean up--another exercise
End Sub
字符串连接中的rs!Code
个实例之间的分号将它们指向适当的列。
答案 1 :(得分:1)
在BeforeUpdate事件中(可能有更好的事件,这就是我测试过的事件),将.Text属性设置为您想要的字符串。
Me.ComboBox1.Text = [Code] & " - " & [LastName] & ", " & [FirstName]
请注意,您可能需要使用字符串构造。
答案 2 :(得分:1)
以下内容可能有助于向包含3列的组合框添加信息。请注意,底部的列宽用于“隐藏”第一列
For x = 1 To 10
ComboBox1.ColumnCount = 3
With ComboBox1
.AddItem "Code" ' Column 1 data
.List(.ListCount - 1, 1) = "LastName" ' Column 2 data
.List(.ListCount - 1, 2) = "FirstName" ' Column 3 data
'etc.
End With
ComboBox1.ColumnWidths = "0cm;2.5cm;2.0cm"
Next
希望这有帮助
编辑:
DisplayString = code & " - " & Lastname & ", " & Firstname
ComboBox1.ColumnCount = 2
With ComboBox1
.AddItem "Code" ' Column 1 data
.List(.ListCount - 1, 1) = DisplayString ' Column 2 data
End With
ComboBox1.ColumnWidths = "0cm;4.5cm;"
答案 3 :(得分:0)
我现在按照我想要的方式工作。这是我做的:
-Did sql中的concat,因此查询返回列[Code]和[DisplayName]。 -Bound = 1,Columns = 2,Column Widths = 0:1“
现在显示值是我在SQL中指定的值,所选值(经过测试和确认)只是代码。
感谢您的帮助,我不太熟悉Access vba。