访问组合框存储1值,显示另一个

时间:2011-06-06 18:44:31

标签: ms-access vba combobox

我有一个返回以下列的查询:

代码
姓氏
FirstName

我有一个组合框,其中所有这些信息都显示在下拉列表中。但是当我选择一行时,我在组合框中看到的只是代码(它是一个员工编号)。我想做的是显示:

  

“[Code] - [LastName],[FirstName]”

作为选择值时的选定项目,并且仍然只将[代码]存储在组合框的.Value属性中。

这是怎么做到的?我已经习惯了C#.NET,其中下拉列表有2个属性(displayValue和selectedValue)。

4 个答案:

答案 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。