同步记录导航控件和记录选择组合框

Synchronizing record navigation control and record selection combo box

我有一个绑定到查询的表单,控件绑定到查询的字段。 我还有一个未绑定的组合框,其 Row Source 是相同的查询,用于通过其 After Update 事件处理程序 select 当前表单记录:

Private Sub Loc_cbo_AfterUpdate()
    DoCmd.SearchForRecord , "", acFirst, "ID = " & Str(Nz(Loc_cbo, 0))
End Sub

组合框有三列:

  1. Bound Column,一个不可见的ID,
  2. 一个位置代码,
  3. 地点名称。

组合的 Row SourceSELECT * FROM Sites ORDER BY Loc DESC。 (最初,它只是 Sites,但由于我将表单的 Order By 作为 Site.Loc DESC,我希望顺序匹配。)

它工作正常。 当然,我可以 通过其导航控件(First、Previous、Next、Last)浏览表单的记录。 这也行得通。 但是,我希望组合框在通过导航控件更改时与当前记录同步。

我尝试通过表单的 Current 事件处理程序来完成,三种不同的方式。 首先,将组合框的文本值设置为与相应文本框控件的文本值相匹配

Private Sub Form_Current()
    Loc_cbo.SetFocus
    Loc_cbo.Text = Loc_txt ‘ ERROR
End Sub

但我明白了

Run-time error ‘2101’: The setting you entered isn’t valid for this property.

其次,设置组合框的 ListIndex 值相对于当前记录

Private Sub Form_Current()
    Loc_cbo.SetFocus
    Loc_cbo.ListIndex = CurrentRecord - 1 ‘ ERROR
End Sub

但我得到相同的 运行 时间错误“2101”或

Run-time error ‘7777’: You’ve used the ListIndex property incorrectly.

在同一个地方。

第三,(感谢HansUp的早期回答)设置组合框的值属性:

Private Sub Form_Current()
    Loc_cbo.Value = Loc_txt.Value 
End Sub

这个 "works" 在没有错误消息的情况下,根据 debug.prints,Loc_cbo 的值确实会更改以匹配 Loc_txt 的值。但是,组合框的可见文本框部分现在似乎总是 empty/blank (其中什么都没有)。

如何让记录 select 或组合框在通过记录导航器更改后与当前记录一致? 我不敢相信用户会因为两者不同步而感到高兴。 我也无法相信我在其他任何地方都没有发现这个问题!

分配给组合的 .Value 属性 以更改其选择。对于 .Value,您不需要 SetFocus

Private Sub Form_Current()
    Me.Loc_cbo.Value = Me.Loc_txt.Value
End Sub

请注意,此建议假定组合的 .Value 是您要与文本框值匹配的内容。检查以确认您希望组合和文本框之间的匹配基于组合的 .Value 而不是组合的另一个列。

Post 死亡:

文本框的内容旨在匹配组合的其中一列。然而,由于组合的 Bound Column 包含与其他列关联的数字,Martin 使用 DLookup 表达式来获取与文本框内容对应的数字并将该数字分配给组合的 .Value 属性:

Me.Loc_cbo.Value = DLookup("ID", "Sites", "Loc= '" & Me.Loc_txt.Value & "'")

请注意,组合的 .Value 是其所选行的 绑定列 中的值。