Доступ к списку хранилищ 1 значение, отображение другого - PullRequest
2 голосов
/ 06 июня 2011

У меня есть запрос, который возвращает следующие столбцы:

Код
Фамилия
Фамилия

У меня есть выпадающий список, где вся эта информация отображается в раскрывающемся списке,Но когда я выбираю строку, все, что я вижу в выпадающем списке, - это код (номер сотрудника).То, что я хотел бы сделать, это отобразить:

"[Code] - [LastName], [FirstName]"

в качестве выбранного элемента при выборе значенияи по-прежнему храните только [Код] в свойстве .Value комбобокса.

Как это сделать?Я привык к C # .NET, где раскрывающийся список имеет 2 свойства (displayValue и selectedValue).

Ответы [ 4 ]

8 голосов
/ 06 июня 2011

1. В этом методе вы не сможете использовать форматирование (тире или запятую):

Установите количество столбцов на 3.
Установите столбец привязкидо 1 (основано на единичном значении, хотя свойство .Column равно нулю).
Отрегулируйте ширину столбцов в соответствии с приятным расположением.
Установите для RowSourceType значение "Таблица / запрос".
Установите для RowSource свойquery.
Do not установить источник управления (оставьте пустым - это оставляет .Value несвязанным с базовыми данными).

Вы можете сделать все вышеперечисленное в режиме конструктора.

2. Этот метод является более трудоемким, но получает именно то, что вы просили:

В режиме конструктора:
Установить количество столбцов равным 2.
УстановитьПривязать столбец к 1,
Установить ширину столбца в 0";2" (принимает дюймы или см, и, если вы просто введете неукрашенные числа, они будут считываться в дюймах (или в соответствии с параметрами (?))).
Установите для RowSourceType значение«Список значений».
Do not установить источник управления (оставьте пустым - это оставляет значение .Value несвязанным с нижележащимing data).

Введите этот код:

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 голос
/ 06 июня 2011

Следующее может помочь добавить информацию в поле со списком из 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

Надеюсь, это поможет

EDIT:

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;"
1 голос
/ 06 июня 2011

В событии BeforeUpdate (может быть, лучше, именно на этом я тестировал), установите для свойства .Text нужную строку.

Me.ComboBox1.Text = [Code] & " - " & [LastName] & ", " & [FirstName]

Обратите внимание, что вам, возможно, придется игратьсо струнной конструкцией.

0 голосов
/ 06 июня 2011

У меня это работает так, как я хочу сейчас.Вот что я сделал:

- Конкат в sql, поэтому запрос возвращает столбцы [Code] и [DisplayName].-Bound = 1, Columns = 2, Column Widths = 0: 1 "

Теперь отображаемое значение - это то, что я указал в моем SQL, а выбранное значение (проверенное и подтвержденное) - просто код.

Спасибо за помощь, я не очень разбираюсь в Access vba.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...