如果表单未绑定,如何选择 MS Access 组合框中的第一项

Posted

技术标签:

【中文标题】如果表单未绑定,如何选择 MS Access 组合框中的第一项【英文标题】:How to select first item in MS Access combobox if form is unbound 【发布时间】:2018-11-15 04:29:51 【问题描述】:

我尝试使用以下命令预选组合框中的第一项:

Private Sub Form_Load()
    Me.ProjectBox = Me.ProjectBox.ItemData(0)
End Sub

但它说 ItemData(0) 为空。我认为这是因为它在查询(行源属性)之前运行以填充组合框。有没有办法在组合框被填充后运行它

【问题讨论】:

我刚刚在我的一个表单上使用未绑定的 ComboBox 尝试了相同的代码,它运行良好,所以至少在我的情况下,RowSource 查询已经执行并且结果已经填充了 ComboBox 的列表。您应该考虑何时以及如何指定 RowSource。是在设计器中设置还是在 Form_Open() 事件中设置,以便在 Form_Load() 事件处理程序期间查询可用? RowSource 查询有多少列以及为 ColumnCountBoundColumn 属性设置了哪些值?还有 ColumnWidths (带有's')属性? ItemData 集合不一定返回显示的值,而是绑定的值。 (即使控件是“未绑定的”,即没有为表单数据指定字段,术语 bound 也用于指示 ComboBox 将返回 RowSource 查询的哪一列。 Value 属性和 ItemData 集合。)发布我提到的所有 ComboBox 属性的值以获得进一步帮助。 ColumnCount:2,列宽:0";1",BoundColumn:0。我也尝试在 Form_Load() 中使用它,但出现更多错误,因为尚未加载表单上的任何其他内容。我也已经尝试过重新查询,但这对我没有什么不同。我忘记提到的一件事是,当我在 Form_Load() 中运行 Me.ProjectBox = Me.ProjectBox.ItemData(0) 时,它会阻止 ComboBox 填充任何条目。 【参考方案1】:

原始代码应该可以正常工作...

Private Sub Form_Load()
    Me.ProjectBox = Me.ProjectBox.ItemData(0)
End Sub

如果在设计器属性表中正确设置了 ComboBox 属性,例如:

RowSource = query
ColumnCount = 2     
BoundColumn = 1   
ColumnWidths = 0";1"

特别注意 BoundColumn = 1

见online docs for BoundColumn。 BoundColumn = 0 有一个特殊的含义,即 ComboBox 的值变成了列表索引值(0、1、2...),而不是 RowSource 列的值。请注意,ComboBox.Column(index, row) 等其他属性的索引值是从 0 开始的,而 ComboBox.BoundColumn 第一个 RowSource 列的索引值从 1 开始......令人沮丧的不一致。

【讨论】:

【参考方案2】:

您可以重新查询组合框。这将暂停代码直到完成:

Private Sub Form_Load()
    Me.ProjectBox.Requery
    Me.ProjectBox = Me.ProjectBox.ItemData(0)
End Sub

【讨论】:

以上是关于如果表单未绑定,如何选择 MS Access 组合框中的第一项的主要内容,如果未能解决你的问题,请参考以下文章

更新取消事件之前的 MS Access 不适用于未绑定的组合框

如何在连续子表单中使用未绑定复选框 - MS Access 2013

MS ACCESS - 如何在更改事件中获取未绑定组合框的当前列值

数据表中的 MS-Access 未绑定组合框?

根据组合框选择切换表单上其他字段的可见性 - MS Access

如何在组合框中返回未绑定列的值