Как связать поле даты с комбинированным списком «Список значений» с 2 столбцами? - PullRequest
1 голос
/ 04 августа 2011

Как связать поле даты с комбинированным списком (с типом источника строки = списком значений)?

Мы настраиваем комбинированный список следующим образом в форме загрузки в VBA:

For i = 0 To 6
    Dim strValueMember As String
    Dim strDisplayMember As String
    strValueMember = format(DateAdd("d", 0 + i, anchorDate), "dd-MMM-yy") & ";"
    strDisplayMember = format(DateAdd("d", 0 + i, anchorDate), "ddd dd-MMM-yy") & ";"
    strItems = strItems & strValueMember & strDisplayMember

Next i
strItems = Left(strItems, Len(strItems) - 1)

Me.cboDeliveryDate.RowSource = strItems

Это дает нам аккуратный маленький комбинированный список с возможностью выбора из списка за 7 дней. В качестве бонуса он видит день недели (на самом деле, для этого конечного пользователя название дня очень важно).

enter image description here

У выпадающего списка есть два столбца: столбец значений (для истинной даты) и столбец отображения (для отображения названия дня).


Но есть проблемы, какие бы Связанные столбцы мы не установили:

Если мы установим столбец привязки в столбец 0 , он, очевидно, будет работать, но сохранено значение 31/12/1899, 01.01.1900, 01.01.1900 и т. Д. Так что это просто чтение списка индексов комбо и преобразование его в дату.

Если установить для столбца «Связанный столбец» значение 1 , это на самом деле работает, когда выбранное значение записывается обратно в базу данных. Но он никогда не отображается в форме, поэтому пользователь явно не почувствует, что его редактирование заняло

Если установить для столбца «Связанный столбец» значение 2 , мы получим ошибку Not In List.


Все вышеперечисленное применяется независимо от того, используем мы dd-MMM-yy для strValueMember или (как подсказывает ответ @HansUp, yyyy-m-d).

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Похоже, что cboDeliveryDate имеет 2 столбца, с strValueMember в качестве первого и это также связанный столбец, связанный с полем Дата / Время. Это сработало для меня, отформатировав strValueMember в формате даты гггг-м-д.

Private Sub Form_Load()
    Dim i As Long
    Dim anchorDate As Date
    Dim strValueMember As String
    Dim strDisplayMember As String
    Dim strItems As String

    anchorDate = Date

    For i = 0 To 6
        strValueMember = Format(DateAdd("d", i, anchorDate), _
            "yyyy-m-d") & ";"
        strDisplayMember = Format(DateAdd("d", i, anchorDate), _
            "ddd dd-MMM-yy") & ";"
        strItems = strItems & strValueMember & strDisplayMember
    Next i
    strItems = Left(strItems, Len(strItems) - 1)
    Me.cboDeliveryDate.RowSource = strItems
End Sub

Я не знал, откуда взялась anchorDate , поэтому я просто заменил сегодняшнюю дату.

0 голосов
/ 04 августа 2011

Хотя это немного сложно, вы также можете создать функцию, которая возвращает список значений, которые вы хотите. Смотрите пример здесь .

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