动态填充和更新组合框中的项目
Posted
技术标签:
【中文标题】动态填充和更新组合框中的项目【英文标题】:Dynamically fill and update items in a combobox 【发布时间】:2015-12-01 13:35:18 【问题描述】:我正在做一个创建课程表的项目。我正在研究访问。所以,假设我已经创建了一些课程表。现在我想使用与表数据绑定的组合框。我设法做到了这一点。但我的问题是例如。如果我在第一个组合框中选择一门课程,我希望在第二个组合框中禁用该课程,以便我无法选择它。以此类推每个组合框(假设为六个组合框执行此操作)
我有这个代码。但是我的代码的问题是,每当我在第三个组合框中选择某些内容时,我的数据就会从上面的组合框中删除。
Private Sub cboMonday_AfterUpdate()
Me.cboTuesday.RowSource = "SELECT CourseName FROM" & _
" tblCourses "
Me.cboWednesday.RowSource = "SELECT CourseName FROM" & _
" tblCourses "
MsgBox ("After Monday= ")
Dim i As Integer
For i = 0 To Me.cboMonday.ListCount - 1
If i <> Me.cboMonday.Value - 1 Then
Me.cboTuesday.AddItem (Me.cboMonday.ItemData(i))
End If
Next
Me.cboTuesday = Me.cboTuesday.ItemData(0)
For i = 0 To Me.cboMonday.ListCount - 1
If i <> Me.cboMonday.Value - 1 Then
Me.cboWednesday.AddItem (Me.cboMonday.ItemData(i))
End If
Next
Me.cboWednesday = Me.cboWednesday.ItemData(1)
End Sub
Private Sub cboTuesday_AfterUpdate()
Me.cboWednesday.RowSource = "SELECT CourseName FROM" & _
" tblCourses "
Dim i As Integer
MsgBox ("After Tuesday= ")
For i = 0 To Me.cboMonday.ListCount - 1
If i <> Me.cboMonday.Value - 1 And i <> Me.cboTuesday.Value - 1 Then
Me.cboWednesday.AddItem (Me.cboMonday.ItemData(i))
End If
Next
Me.cboWednesday = Me.cboWednesday.ItemData(0)
End Sub
【问题讨论】:
【参考方案1】:从表/查询组合框中添加/删除项目不是一个好的解决方案,在许多其他情况下,包括行源属性的更改,当主窗体刷新时,列表将被刷新,就像在你的例子中一样。
更好的方法是创建引用其他组合框的行源查询。例如,如果在 cboWednesday 我不想包含在 cboMonday 和 cboTuesday 中选择的课程,则 cboWednesday 的 Row Source 属性将为SELECT CourseName FROM tblCourses WHERE CourseName Not In ([Forms]![Form1]![cboMonday],[Forms]![Form1]![cboTuesday]);
。对于其他组合框,您可以根据需要添加对其他组合框的引用。
在 AfterUpdate 组合框事件中,只需刷新组合框,这取决于当前组合框。
如果绑定列和显示列相同,这应该可以工作,就像你的例子一样。如果绑定列被隐藏,重新查询后数据可能会消失。在这种情况下,您可以在所有组合框中保留完整的课程列表,但在 BeforUpdate 事件中检查是否已经在其他组合框中选择了课程并拒绝选择并发出警告。
【讨论】:
如何拒绝选择并发出警告。BeforeUpdate
事件有参数Cancel
。如果将其设置为True
,则不会接受所选值。检查是否选择了错误的值,弹出消息,设置Cancel=true
并退出子以上是关于动态填充和更新组合框中的项目的主要内容,如果未能解决你的问题,请参考以下文章