组合框级联效果不适用于不同的行
Posted
技术标签:
【中文标题】组合框级联效果不适用于不同的行【英文标题】:combobox cascade effect not working for different rows 【发布时间】:2012-05-03 17:16:18 【问题描述】:我在一个子窗体上有两个组合框。第一个组合框用于填充第二个组合框。这些放置在表单的详细信息部分。我希望它们以这种方式工作:当我从第一个组合框中选择任何值时,我希望同一行的第二个组合框由相关值填充。
到目前为止,我已经尝试实现这一点,当我从第 1 行的第一个组合框中选择任何值时,我看到同一行的第二个组合框被填充,但是当我继续从第一组组合框中选择值时我看到上面第二组组合框中的值发生了变化或变为空。
代码如下:
第一个组合框是 cboRCMTask:
Private Sub cboRCMTask_AfterUpdate()
Me.cboRCMTaskOptions.RowSource = "SELECT ID, RCMTaskOptions FROM tblRCMTaskOptions WHERE RCM_ID=" & Me.cboRCMTask.Column(0) & ";"
Me.cboRCMTaskOptions = Me.cboRCMTaskOptions.ItemData(0)
Me.cboRCMTaskOptions.Requery
End Sub
cboRCMTaskOptions 是第二个组合框。
form_current 事件:
Private Sub Form_Current()
Me.cboRCMTask.RowSource = "SELECT ID, RCMTask FROM tblRCMTask;"
If IsNull(txtRCM_ID) Then
Me.cboRCMTask = Me.cboRCMTask.ItemData(0)
End If
Me.cboRCMTaskOptions.RowSource = "SELECT ID, RCMTaskOptions FROM tblRCMTaskOptions WHERE RCM_ID=" & Me.cboRCMTask.Column(0) & ";"
If IsNull(txtRCMOption_ID) Then
Me.cboRCMTaskOptions = Me.cboRCMTaskOptions.ItemData(0)
End If
End Sub
【问题讨论】:
【参考方案1】:在您的第一段代码中,将代码转移到 on_click 事件。我不确定您要通过引用 ItemData 来实现什么,但我认为没有必要,请注释掉该行。
同样是 Form_current 事件中倒数第三行,替换为重新查询。
【讨论】:
我不推荐点击事件。如果这是一个单一的形式,组合 1 的当前事件和更新后事件是级联组合的常见事件。 我不仅希望重新查询第二个组合框,还希望在表单的详细信息部分显示默认值。 @user1175126 您使用的是连续表格吗?因为如果你是,这一切都不会发生。 是的。子表单是连续的,而主表单是单表单的。【参考方案2】:根据您的描述,您使用的是连续形式。虽然它看起来像一个连续的表格有很多行,但从编码的角度来看,您可以认为它只有一行,即当前行。我怀疑组合 2 的控制源是组合中隐藏的数字列,当您更改组合的行源时,无法再找到可见行,因此无法显示。您要么必须提供一个弹出式表单进行编辑,要么提供一个文本框来存储表单的值,并提供一个稍微狡猾的组合来编辑该值。您可以通过条件格式来改善外观。
【讨论】:
第二个组合框的控件是RCMOption_ID,它是一个字符串。 我不确定你是否明白我的意思。您似乎正在使用连续形式。当您更改当前事件中的第二个组合时,您正在为 所有 行更改它。 那么我该如何纠正它?如果不是当前事件,在哪里? 我的回答有什么让你不清楚的地方吗?您不能在连续形式上执行此操作。您正在使用连续形式,不是吗? 是的。子窗体是连续的,而主窗体是单窗体的。以上是关于组合框级联效果不适用于不同的行的主要内容,如果未能解决你的问题,请参考以下文章