在数据表子表单中使用级联组合框

时间:2012-11-24 13:51:34

标签: forms vba ms-access access-vba

在Access 2010中,我有通过表Task建立多对多关系的表ActionActionTask。在Task的表单中,我想通过Action联结表为与当前任务相关的所有ActionTask放置一个子表单。

这本身就是我能做到的。

诀窍是Action实际上是表的四层层次结构的最低等级。 每个Action属于Goal,每个Goal属于Theme,每个Theme属于Strategy

我不想只列出列出所有可用Action的组合框,而是希望为Strategy / Theme / Goal /使用级联组合框Action

我也可以这样做。

问题是当我在数据表中使用此技术时,如果我选择给定行,则所选行显示正确的Strategy / Theme / Goal / {{1} },但在所有其他行

  • Action为空白
  • Action / Strategy / Theme设置为当前行的值,而不是该行的值

selecting one row in datasheet view selecting another row in datasheet view

我尝试使用“连续表单”视图而不是“数据表”视图,但结果几乎相同。

selecting one row in continuous forms view selecting another row in continuous forms view

我想我知道为什么(我Goal回调中的Me.StrategyCombo = ...内容),但我不知道另一种实现方法。

如何让子窗体正确显示所有行?


Here's the Access file,但所有相关细节应在下面。

Form_Current

3 个答案:

答案 0 :(得分:3)

你做不到。任何操作都适用于子窗体当前记录,但似乎会影响所有控件。有各种解决方法。

答案 1 :(得分:2)

据我所知你不能,但你可以通过创建一个连续的表单来处理它,将你的字段放在表格布局中,然后为每个组合框添加一个文本框(如果字段是prodID,那么我命名为文本框txtprodID)。将文本框移到组合框的顶部,但稍微窄一些,只是对组合列表箭头的羞涩,然后编写代码来更新文本框。

答案 2 :(得分:2)

我解决了数据表中依赖(级联)组合框的问题。 本质上,如果组合框1依赖于组合框2中的值,它将把当前行的“行源”应用于数据表中的所有行

解决方案:

1在加载程序或设计器中,定义行源以包括所有行,以便其后的数据值将始终与行源中的一个选项匹配(否则显示空白值)

即:

char

2在从属组合框获取焦点事件中,将行源重新定义为基于前者所依赖的另一个组合框中的值。重新查询控件

Private Sub Form_Load()
    Me.cmbProjects.RowSource = "SELECT [Projects].[ProjectPK],  [Projects].[ProjectName], [Projects].[PI_ID] FROM [Projects]  ORDER BY  [ProjectName] "
End Sub

3在从属组合框失去焦点事件中,将行源重新定义为不基于前者所依赖的另一个组合框中的值。

Private Sub cmbProjects_GotFocus()
Me.cmbProjects.RowSource = "SELECT [Projects].[ProjectPK],  [Projects].[ProjectName], [Projects].[PI_ID],  [Projects].[Status] FROM [Projects]  WHERE [PI_ID] = " + CStr(cmbPIs.Value) + " ORDER BY [PI_ID], [ProjectName] "
cmbProjects.Requery
End Sub