我们如何将日期字段绑定到具有2列的“值列表”组合框?

时间:2011-08-04 13:25:03

标签: ms-access data-binding combobox date

我们如何将日期字段绑定到组合框(行源类型=值列表)?

我们在VBA中的Form Load中设置了这样的组合框:

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,1 / 1 / 1900,2 / 1/1900等。所以它是只需阅读组合的listindex并将其转换为日期。

如果我们将绑定列设置为列 1 ,它实际上的工作原理是将所选值写回数据库。但它永远不会显示在表单上,​​因此用户显然不会觉得他的编辑已经进行了

如果我们将绑定列设置为列 2 ,我们会收到Not In List错误。


以上所有内容均适用于我们是否将dd-MMM-yy用于strValueMember或(如@HansUp答案所示,yyyy-m-d)。

2 个答案:

答案 0 :(得分:1)

在我看来, cboDeliveryDate 有2列, strValueMember 作为第一列,它也是绑定列,绑定到日期/时间字段。通过以yyyy-m-d日期格式格式化 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 的来源,所以我只是取代了今天的日期。

答案 1 :(得分:0)

虽然有点复杂,但您还可以创建一个返回所需值列表的函数。 请参见示例here