如果表单未绑定,如何选择 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 查询有多少列以及为 ColumnCount 和 BoundColumn 属性设置了哪些值?还有 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 - 如何在更改事件中获取未绑定组合框的当前列值