我正在制作一个创建课程安排的项目。我正在开发Access。所以,假设我已经创建了一些课程表。现在我想使用与表数据绑定的组合框。我设法做到了这一点。但我的问题是例如。如果我在第一个组合框中选择一个课程,我希望在第二个组合框中禁用该课程,以便我无法选择它。等等每个组合框(假设为六个组合框执行此操作)
我有这个代码。但我的代码的问题是,每当我在第三个组合框中选择某些内容时,我的数据都会从上面的组合框中删除。
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
答案 0 :(得分:0)
在表/查询组合框中添加/删除项目不是一个好的解决方案,当主表单在许多其他情况下刷新时,列表将刷新,包括更改行源属性,如您的示例中所示。
更好的方法是创建引用其他组合框的行源查询。例如,如果在cboWednesday中我不想包括在cboMonday和cboTuesday中选择的课程,则cboWednesday的Row Source属性将为SELECT CourseName FROM tblCourses WHERE CourseName Not In ([Forms]![Form1]![cboMonday],[Forms]![Form1]![cboTuesday]);
。对于其他组合框,您可以根据需要添加任意数量的其他组合框。
在AfterUpdate组合框中,只需刷新组合框,这取决于当前组合框。
如果绑定和显示列相同,这应该有效,就像在您的示例中一样。如果隐藏了绑定列,则在重新查询后数据可能会消失。在这种情况下,您可以在所有组合框中保留完整的课程列表,但在BeforUpdate事件检查中是否已在其他组合框中选择了cource并拒绝选择并发出警告。