创建级联列表框

应用对象
InfoPath 2010 InfoPath 2013

级联列表框可帮助用户更快地填写表单,并帮助确保用户正确输入数据。 本文介绍如何使用数据创建和填充级联列表框。 在 Microsoft Office InfoPath 中,可以使用表单中的值、外部可扩展标记语言 (XML) 文档中的值或Microsoft Office Access 数据库中的值填充列表。

本文内容

什么是级联列表框?

级联列表框是一个列表框,其选项根据用户在另一个列表框中选择的值而更改。 例如,如果用户单击下图所示的“类别”框中的“调味品”,“产品”框将显示调味品列表。

ebf717d3-11f3-4d0c-81eb-179b8412400d

以下部分演示如何设计包含两个列表框的表单模板,其中第二个列表框根据用户从第一个列表框中选择的值进行筛选。 当第一个列表框中的值更改时,筛选器将自动应用于第二个列表框,这会更改其值。

兼容性注意事项

筛选器只能在设计为在 InfoPath 中填写的表单模板中使用。 筛选器在浏览器兼容的表单模板中不可用。

返回页首

步骤 1:插入级联列表框

若要创建级联列表框,必须在表单模板中插入两个列表框。

注意

在表单模板中插入级联列表框时,请确保两个列表框不在重复节或重复表中。

  1. 如果看不到“控件”任务窗格,请单击“插入”菜单上的“其他控件”,或按 Alt+I、C。
  2. “控件 ”任务窗格中的“插入 控件 ”下,单击“ 下拉列表框”。 当用户填写基于表单模板的表单时,此下拉列表框中的选择将确定第二个列表框中可用的选项。
  3. 单击“ 列表框”。 表单模板现在应包含下拉列表框和标准列表框。
    93d60c8d-1ecb-418a-94df-e1a063848bf6
  4. 双击在步骤 2 中插入到表单模板中的下拉列表框。
  5. “下拉列表框属性 ”对话框中,单击“ 数据 ”选项卡。
  6. “字段名称 ”框中,键入 listBox1,然后单击“ 确定”。
  7. 双击在步骤 3 中插入到表单模板中的列表框。
  8. “列表框属性 ”对话框中,单击“ 数据 ”选项卡。
  9. “字段名称 ”框中,键入 listBox2Cascade,然后单击“ 确定”。

返回页首

步骤 2:提供数据

在表单模板中插入列表框后,必须提供它们将显示的数据。 然后,必须应用筛选器,以便第二个列表框中的选项基于用户在第一个列表框中的选择。

本部分介绍如何使用三种常用方法将列表框连接到数据:将数据添加到表单本身;将表单连接到包含数据的现有 XML 文档;或将窗体连接到包含数据的数据库。 若要完成创建级联列表框,请单击要在以下列表中使用的方法。

连接到表单中的数据

在本部分中,你将了解如何使用表单中的数据填充列表框。 为此,必须先在表单模板中配置字段,以便可以为每个类别输入类别的名称和一组产品。

在表单模板中配置字段

  1. 如果“数据源”任务窗格不可见,请单击“视图”菜单上的“数据源”。
  2. “数据源 ”任务窗格中,右键单击 “myFields” 组,然后单击“ 添加”。
  3. 在“ 名称 ”框中的“ 添加字段或组 ”对话框中,键入 CategoriesAndProducts
  4. “类型” 列表中,单击“ ”。
  5. 选择“重复检查”框,然后单击“确定”。
  6. “数据源 ”任务窗格中,右键单击“ CategoriesAndProducts ”组。
  7. 在“ 名称 ”框中的“ 添加字段或组 ”对话框中,键入 “类别”,然后单击“ 确定”。 此字段将包含第一个列表框的类别名称。
  8. 右键单击“ CategoriesAndProducts” 组,然后单击“ 添加”。
  9. 在“ 名称 ”框中的“ 添加字段或组 ”对话框中,键入“ Product”。
  10. 选择“重复检查”框,然后单击“确定”。 此字段将包含第二个列表框的产品的名称。

由于此列表框填充了来自窗体的数据,因此必须将数据添加到窗体中。 为此,您必须为 “产品 ”和 “类别” 字段创建默认值。

提示

还可以创建列表框,用于显示用户自己在表单中键入的值。 为此,请将列表框与绑定到窗体中控件的字段相关联。 当用户在控件中输入值时,列表框中的选项会更改。

创建默认值

  1. “工具 ”菜单上,单击“ 默认值”。
  2. “编辑默认值”对话框的“CategoriesAndProducts”组中,选择“类别”字段 (不清除检查框) ,然后在“默认值”框中,键入“海鲜”。
  3. 选择“产品”字段 (不清除) 检查框,然后在“默认值”框中键入“蟹肉”。
  4. 右键单击“ 产品 ”字段,然后单击 上面的“添加另一个产品”。 这样,便可以将海鲜的第二个产品添加为默认值。
  5. 右键单击“产品”字段的第二个实例, (不清除检查框) ,然后在“默认值”框中键入“Salmon”。
  6. 右键单击“ CategoriesAndProducts ”组,然后单击 下面的“添加其他 CategoriesAndProducts”。 这使你可以添加第二个类别作为默认值。
  7. 使用前面的步骤分别将 “类别 ”和“ 产品 ”字段的第二个实例的默认值指定为 “乳品”、“ 切达”“巧克力牛奶”。
  8. 单击“确定”。

现在,你已为 “产品 ”和“ 类别” 字段输入默认值,可以将第一个列表框连接到刚刚输入的数据。

将第一个列表框连接到数据

  1. 在表单模板中,双击之前插入的下拉列表框。
  2. 单击“数据”选项卡。
  3. “下拉列表框属性 ”对话框中的“ 列表框条目”下,单击“ 查找窗体数据源中的值”。
  4. 单击“条目”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。
  5. “选择字段或组 ”对话框中的“ CategoriesAndProducts ”组中,单击“ 类别 ”字段,然后单击“ 确定 ”两次。

现在,必须将第二个列表框连接到数据。 建立此数据连接时,需要向第二个列表框应用筛选器。 此筛选器将根据第一个列表框中选择的类别,使用相应的产品填充第二个列表框。 筛选器将 (listBox1 字段) 的第一个列表框中选择的值与) “类别”字段 (窗体中保存的类别列表进行比较。

将第二个列表框连接到数据

  1. 在表单模板中,双击之前插入的标准列表框。
  2. 单击“数据”选项卡。
  3. 在“ 列表框属性 ”对话框中的“ 列表框条目”下,单击“ 查找窗体数据源中的值”。
  4. 单击“条目”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。
  5. “选择字段或组 ”对话框中的“ CategoriesAndProducts ”组中,单击“ 产品 ”字段,然后单击“ 筛选数据”。
  6. 在“ 筛选数据 ”对话框中,单击“ 添加”。
  7. “指定筛选条件 ”对话框中,在第一个框中单击“ 选择字段或组 ”。
  8. “选择字段或组 ”对话框中,单击 “listBox1”,然后单击“ 确定”。
  9. 在“ 指定筛选条件 ”对话框中,在第三个框中单击“ 选择字段或组 ”。
  10. “选择字段或组 ”对话框中,单击“ 类别 ”字段,然后单击“ 确定 ”关闭所有打开的对话框。

现在,你已将第二个列表框连接到数据并应用了筛选器,接下来可以测试列表框以确保它们正常工作。

测试列表框

  1. 要测试所做的更改,请单击“常用”工具栏上的“预览”,或者按 Ctrl+Shift+B。

  2. 在下拉列表框中,单击“ 海鲜”。 标准列表框应显示空白行、 蟹肉鲑鱼

    注意

    空白行允许用户从列表框中清除其选择。

如果列表框无法正常工作,请查看第二个列表框的筛选器,确保它将 listBox1 字段与 Category 字段进行比较。

部分顶部

连接到外部 XML 文档

在本部分中,你将了解如何创建与包含产品和类别值的 XML 文档的数据连接。 XML 文档将是辅助数据源。 若要创建此数据连接,需要创建 XML 文档,将表单模板中的列表框与 XML 文档相关联,然后将筛选器应用于第二个列表框,以便产品列表相应地更改。

必须先创建 XML 文档,然后才能将表单与辅助数据源相关联。

创建 XML 文档

  1. 启动记事本或其他文本编辑器。

  2. 将以下 XML 数据复制并粘贴到文本编辑器中:

    <?xml version="1.0" encoding="UTF-8"?>
    <ListBoxData>
         <CategoriesAndProducts>
              <Categories>Seafood</Categories>
              <Products>
                   <Product>Crab meat</Product>
              </Products>
              <Products>
                   <Product>Salmon</Product>
              </Products>
         </CategoriesAndProducts>
         <CategoriesAndProducts>
              <Categories>Dairy</Categories>
              <Products>
                   <Product>Chocolate milk</Product>
              </Products>
              <Products>
                   <Product>Cheddar</Product>
              </Products>
         </CategoriesAndProducts>
    </ListBoxData>
    
    
  3. 在计算机上将文件另存为 listBoxData.xml

创建 XML 文档后,可以将其连接到表单模板。 这将创建辅助数据源。

将 XML 文档连接到表单模板

  1. “工具 ”菜单上,单击“ 数据连接”。
  2. 在“ 数据连接 ”对话框中,单击“ 添加”。
  3. 在“数据连接向导”中,单击“ 接收数据”,然后单击“ 下一步”。
  4. 在向导的下一页上,单击“ XML 文档”,然后单击“ 下一步”。
  5. 在向导的下一页上,单击“ 浏览”,选择保存到计算机的 listBoxData.xml 文件,然后单击“ 打开”。
  6. 在向导的下一页上,单击“ 将数据作为资源文件包含在表单模板或模板部件中”,然后单击“ 下一步”。
  7. 在向导的下一页上,在 “输入此数据连接的名称 ”框中,键入 listBoxDataXMLFile
  8. 选中“打开窗体时自动检索数据检查框。 这可以保证每次打开表单时列表框数据都可用,而不是要求用户查询它。
  9. 单击“完成”
  10. 在“ 数据连接 ”对话框中,单击“ 关闭”。

现在可以将表单模板中的第一个列表框连接到 XML 文档中的数据。

将第一个列表框连接到数据

  1. 在表单模板中,双击之前插入的下拉列表框。

  2. 单击“数据”选项卡。

  3. “下拉列表框属性 ”对话框中的“ 列表框条目”下,单击“ 从外部数据源查找值”。

  4. 在“ 数据源 ”框中,单击“ listBoxDataXMLFile”。

  5. 单击“条目”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。

  6. “选择字段或组 ”对话框中的 “CategoriesAndProducts ”组中,单击“ 类别” 字段。

    注意

    “选择字段或组”对话框中的黄色背景表示你正在使用辅助数据源。

  7. 单击“确定”两次。

现在,您必须将第二个列表框连接到 XML 文档。 建立此数据连接时,需要向第二个列表框应用筛选器。 此筛选器将根据第一个列表框中选择的类别,使用相应的产品填充第二个列表框。 筛选器将 (listBox1 字段) 的第一个列表框中选择的值与) “类别”字段 (窗体中保存的类别列表进行比较。

将第二个列表框连接到数据

  1. 在表单模板中,双击之前插入的标准列表框。
  2. 单击“数据”选项卡。
  3. 在“ 列表框属性 ”对话框中的“ 列表框条目”下,单击“ 从外部数据源查找值”。
  4. 在“ 数据源 ”框中,单击“ listBoxDataXMLFile”。
  5. 单击“条目”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。
  6. “选择字段或组 ”对话框中的 “CategoriesAndProducts ”组中,展开“ 产品 ”组,然后单击“ 产品 ”字段。
  7. 单击“ 筛选数据”。
  8. 在“ 筛选数据 ”对话框中,单击“ 添加”。
  9. “指定筛选条件 ”对话框中,在第一个框中单击“ 选择字段或组 ”。
  10. 在“ 数据源 ”框中的“ 选择字段或组 ”对话框中,单击“ ”。
  11. 单击 listBox1,然后单击 “确定”。
  12. 在“ 指定筛选条件 ”对话框中,在第三个框中单击“ 选择字段或组 ”。
  13. 在“ 数据源 ”框中的“ 选择字段或组 ”对话框中,单击“ listBoxDataXMLFile (辅助) ”,然后单击“ 类别”。
  14. 单击“确定”,关闭所有打开的对话框。

现在,已将第二个列表框连接到 XML 文档并应用了筛选器,接下来可以测试列表框以确保它们正常工作。

测试列表框

  1. 要测试所做的更改,请单击“常用”工具栏上的“预览”,或者按 Ctrl+Shift+B。

  2. 在下拉列表框中,单击“ 海鲜”。 标准列表框应仅显示空白行、蟹肉和鲑鱼。

    注意

    空白行允许用户从列表框中清除其选择。

如果列表框无法正常工作,请查看第二个列表框的筛选器,确保它将 listBox1 字段与 Category 字段进行比较。

部分顶部

连接到数据库

在本部分中,你将了解如何创建与 Access 数据库中两个表的数据连接。 为此,请将表单模板中的列表框与数据库相关联,然后将筛选器应用于第二个列表框,以便第二个列表框中显示的列表根据第一个列表框中选择的值相应地更改。 对于此示例,我们将假定 Access 数据库包含两个名为 Categories 和 Products 的表,并且这两个表通过在每个表中使用的 CategoryID 字段相互关联。

类别表 

CategoryID CategoryName
1 海鲜
2 奶制品

产品表 

ProductID CategoryID ProductName
1 1 蟹肉
2 1 鲑鱼
3 2 巧克力牛奶
4 2 切达

将表单模板连接到数据源

首先,必须在表单模板与数据库中的表之间创建数据连接。 由于仅显示数据库中的数据,而不是直接修改,Access 数据库将成为表单模板的辅助数据源。

  1. “工具 ”菜单上,单击“ 数据连接”。

  2. 在“ 数据连接 ”对话框中,单击“ 添加”。

  3. 在“数据连接向导”中,单击“ 接收数据”,然后单击“ 下一步”。

  4. 在向导的下一页上,单击“数据库 (Microsoft SQL Server或仅Microsoft Office Access) ”,然后单击“下一步”。

  5. 在向导的下一页上,单击“ 选择数据库”,然后浏览到并双击硬盘上的 Access 数据库。

  6. “选择表 ”对话框中,单击包含要在此示例中第一个列表中显示的数据的表 (“类别”表) ,然后单击“ 确定”。 这将指定表作为数据连接的主表。

  7. 在向导中,单击“ 添加表”。

  8. 在“ 添加表或查询 ”对话框中,单击包含要在此示例中的第二个列表 (“产品”表) 的数据的表,然后单击“ 下一步”。

  9. “编辑关系 ”对话框中,确保连接字段正确。 在此示例中,表通过 CategoryID 字段相互关联。

    提示

    如果连接字段不正确,请选择字段,然后单击“ 删除关系”。 然后,单击“ 添加关系”,选择正确的字段,然后单击“ 确定”。

  10. 单击“完成”

    注意

    在此示例中,类别表与 products 表具有一对多关系,这意味着对于每个类别,可以有多个产品。 在数据库中,这种关系通常是通过使用键字段建立的。 在这种情况下,CategoryID 键字段使 Access 能够将正确的产品集与相应的类别相关联。

  11. 在向导中,查看数据源结构。 应会看到两个表相互连接:主表和辅助表。 若要查看表中的各个字段,请选择“检查显示表列”框。 查看完数据结构后,单击“ 下一步”。

  12. 清除“在表单模板检查中存储数据的副本”框,然后单击“下一步”。

  13. 在“ 输入此数据连接的名称 ”框中,在向导的下一页上,键入数据连接的名称。

  14. 选中“打开窗体时自动检索数据检查框。

  15. 单击“完成”,然后在“数据连接”对话框中单击“关闭”。

将第一个列表框连接到数据

创建与辅助数据源的数据连接后,可以将表单模板中的第一个列表框连接到数据库中的表。

  1. 在表单模板中,双击前面插入的下拉列表框。

  2. 单击“数据”选项卡。

  3. “下拉列表框属性 ”对话框中的“ 列表框条目”下,单击“ 从外部数据源查找值”。

  4. 在“ 数据源 ”框中,确保已选择创建的数据连接。

  5. 单击“条目”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。

  6. “选择字段或组 ”对话框中,单击包含要在下拉列表中显示的数据的表的名称, (在此示例中为 d:Categories ) ,然后单击“ 确定”。

    注意

    “选择字段或组”对话框中的黄色背景表示你正在使用辅助数据源。

  7. 单击“”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。

  8. “选择字段或组 ”对话框中,确保选中了本示例中的连接字段 (:CategoryID) ,然后单击“ 确定”。 这是用户在列表框中进行选择时将保存的值。

  9. 单击“显示名称”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。

  10. “选择字段或组 ”对话框中,单击要在下拉列表中显示的字段的名称, (此示例中 为 :CategoryName) 。

  11. 单击“确定”两次。

将第二个列表框连接到数据

现在,必须将第二个列表框连接到数据库。 建立此数据连接时,需要向第二个列表框应用筛选器。 此筛选器将根据在第一个列表框中选择的值,使用适当的值填充第二个列表框。

  1. 在表单模板中,双击标准列表框。

  2. 单击“数据”选项卡。

  3. 在“ 列表框属性 ”对话框中的“ 列表框条目”下,单击“ 从外部数据源查找值”。

  4. 在“ 数据源 ”框中,确保已选择创建的数据连接。

  5. 单击“条目”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。

  6. “选择字段或组 ”对话框中,展开本示例中的主组 (,d :Categories) ,然后单击与包含要在此示例中“ 产品) ”级联列表 (框中显示的表相对应的辅助组。

  7. 单击“ 筛选数据”。

  8. 在“ 筛选数据 ”对话框中,单击“ 添加”。

  9. 在“ 指定筛选条件 ”对话框中的第一个框中,确保选中了辅助表中 (“ 产品) ”的连接字段。

    重要

    如果连接字段在两个表中具有相同的名称,请确保选择正确的字段。 每个表中的字段在列表中一起排序。 因此,可以使用周围的字段名称来确定哪个字段名称是正确的。 在此示例中,我们将选择“CategoryID”字段,该字段与 Products 表中的其他字段一起显示。

  10. 在第三个框中,单击“ 选择字段或组”。

  11. 在“ 数据源 ”框中的“ 选择字段或组 ”对话框中,单击“ ”,单击 “listBox1 ”字段,然后单击“ 确定”。
    现在配置了一个筛选器,该筛选器将下拉列表框中选择的值 (listBox1 字段) 与标准列表框中的值列表进行比较。

  12. 单击 “确定” 三次可返回到 “列表框属性 ”对话框。

  13. 单击“”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。

  14. “选择字段或组 ”对话框中,选择要在列表框中进行选择时保存的值。 在此示例中,我们希望保存 ProductID 字段以供以后使用。 因此,我们选择 “:P roductID ”组,然后单击“ 确定”。

  15. 单击“显示名称”框旁边的“选择 XPath038c9c35-ca90-4bf1-a2e2-2342022bdbc1”。

  16. “选择字段或组 ”对话框中,单击要在此示例中 (列表框中显示的字段的名称, :P roductName) 。

  17. 单击“确定”两次。

测试列表框

现在,已将第二个列表框连接到数据库并应用了筛选器,接下来可以测试列表框以确保它们正常工作。

  1. 要测试所做的更改,请单击“常用”工具栏上的“预览”,或者按 Ctrl+Shift+B。
  2. 在下拉列表框中选择一个值。 标准列表框应显示辅助表中的相应值,具体取决于所选的连接字段。

提示

如果列表框无法正常工作,请查看第二个列表框的筛选器,确保它将 listBox1 字段与 CategoryID 字段进行比较。

部分顶部

返回页首