0

我开始处理我的第一个 InfoPath 表单。我有一个三个下拉列表(Global FunctionMajor TaskSubtask),它们需要查询 SQL 数据库并根据之前下拉列表中的选定值过滤它们的数据。

到目前为止我做了什么

  1. 我已经添加了数据连接(对于每个表和相应的下拉列表),它只是在数据库中查询表中的所有记录。对于离线模式,每个连接都设置为“在表单模板中存储数据的副本”。

    然后在下拉列表框属性中,我将列表框选项设置为“从外部数据源获取选择”并设置条目字段以选择适当表/下拉列表组合的列。

    但是,当我向数据添加过滤器并尝试预览表单时,“级联”下拉列表中的数据永远不会改变。它仍然有所有的记录。

  2. 因此,我尝试为其中一个级联下拉菜单添加新规则。例如,我为Major Task下拉菜单创建了一个新规则并将其设置如下:

    • 条件为Global Function is not blank
    • 规则类型Action
    • 运行这些操作:
    • 使用数据连接查询:主要任务(仅获取所有记录)

    我在规则/操作中看不到任何地方来过滤数据。

  3. 编辑我刚刚尝试了一个新的数据连接,它具有正确设置关系的所有三个表(GlobalFunctions、、MajorTasksSubtasks)(即 GlobalFunctions.Id = MajorTasks.GlobalFunction)。然后我将下拉列表的数据源设置为这个新连接。但是,这也根本不过滤数据。它们的条目和值如下:

    • 全局功能:
      • 参赛作品:/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions
      • 筛选:<None>
      • 价值:@Id
      • 显示名称:@Summary
    • 主要任务:
      • 参赛作品:/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks
      • 筛选:GlobalFunction = Id
      • 价值:@Id
      • 显示名称:@Summary
    • 子任务:
      • 参赛作品:/dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks/d_1:SubTasks
      • 筛选:MajorTask = Id
      • 价值:@Id
      • 显示名称:@Summary

限制

  • 我不能有任何代码(因为它不能在浏览器中工作,对吧?)
  • 表格必须能够在 Web 或本地计算机上填写(工作站上保存的副本)
  • 当没有连接到 SQL 数据库时应该仍然可以工作

问题

如何在 InfoPath 2010 中实现多个级联下拉列表,并将数据连接到可以在浏览器中工作的 MS SQL 数据库并使用 InfoPath Filler(后者可能没有与数据库的连接)。

SQL 表

表格如下所示:

CREATE TABLE GlobalFunctions (
    Id SMALLINT NOT NULL IDENTITY(1,1),
    Summary varchar(MAX) NOT NULL UNIQUE,
    PRIMARY KEY (Id)
);

CREATE TABLE MajorTasks (
    Id SMALLINT NOT NULL IDENTITY(1,1),
    Summary varchar(MAX) NOT NULL UNIQUE,
    GlobalFunction SMALLINT NOT NULL,
    PRIMARY KEY (Id),
    FOREIGN KEY (GlobalFunction) REFERENCES GlobalFunctions(Id)
);

CREATE TABLE SubTasks (
    Id SMALLINT NOT NULL IDENTITY(1,1),
    Summary varchar(MAX) NOT NULL UNIQUE,
    MajorTask SMALLINT NOT NULL,
    PRIMARY KEY (Id),
    FOREIGN KEY (MajorTask) REFERENCES SubTasks(Id)
);
4

1 回答 1

1

好的,我在这篇文章中找到了我的解决方案。

基本上我的问题是在当前下拉列表中过滤时,我没有在上一个下拉列表中选择正确的值(实际选择的值)。相反,我是根据数据库数据选择该选项的值。

这些是我解决问题所采取的步骤(转载自文章以防万一):

  1. 右键单击第一个下拉列表并单击“下拉列表属性”并适当地设置其数据源。
  2. 右键单击下一个要级联的下拉列表,然后单击“下拉列表属性”。
  3. 适当地设置数据源。
  4. 仍然在第二个下拉列表中,单击“Entries”框旁边的“ Select XPath ”按钮。
  5. 单击“过滤数据”,然后单击添加。
  6. 在第一个下拉框中,选择“选择字段或组... ”。
  7. 在“数据源”下拉列表中,选择“主要”。
  8. 选择“全局函数”字段,下拉系列中的第一个(可能在“ myFields ”下,然后是“ dataFields ”)。
  9. 在中间的下拉列表中设置相等运算符。
  10. 在最后一个下拉菜单中,选择“选择一个字段或组... ”。
  11. 不更改数据源,在MajorTasks选择下:GlobalFunction(与全局函数表的 FK 关系)。
  12. 确定所有对话框并重复子任务下拉列表(系列中的最后一个)
于 2011-08-09T17:25:07.630 回答