在前面的博文中,我曾经介绍过一种使用InfoPath默认值来实现下拉列表框级联的方法,该方法在InfoPath2007时代FormService不支持筛选的情况下,解决了无代码实现级联的问题,但该方法在数据多的情况下显得极为繁琐,本文中我将使用InfoPath2010介绍一种以SharePoint列表作为数据源,实现下拉列表框级联的方式,比较前一种方法,此方法更为简便灵活,易于操作。 

    在InfoPath2010中,我们注意到在InfoPath2007中“启用浏览器功能的表单模板不支持筛选”的限制不见了,这意味着我们可以在FormService渲染的表单中筛选数据,使下拉列表框级联成为可能。 

    下面我以SharePoint列表作为数据源为例,讲解一下实现的过程:

 

【题设】

    学校里每个年级拥有的班级数目都不同,在选择班级时,我们需要先选择年级,然后将该年级所包含的班级筛选出来以供用户选择。

 

【准备】

    在SharePoint中创建自定义列表“班级信息”,其中包含字段:年级(单行文本)、班级(单行文本),并在其中填好所需的信息:

InfoPath表单模板的数据源中添加两个文本类型的域(元素):

 

【详细步骤】

1. 在Ribbon工具栏中选择“数据”标签,点击“自SharePoint列表”:

  

2. 在弹出的对话框中输入列表“班级信息”的URL地址,点击“下一步”:

3. 选择“班级信息”,点击“下一步”:      

4. 勾选上“年级”“班级”,点击“下一步”:

5. 点击下一步,直到完成。

6. 在InfoPath的设计窗格中拖入两个下拉列表框,分别绑定GradeClass:

7. 在Grade的下拉列表框属性中,选择“从外部数据源获取选项”,在数据源中选择“班级信息”

 

 

8. 依次点击上图中红框标注的按钮,选择“年级”:

9. 勾选下方的“仅显示具有唯一显示名称的条目”,点击确定:

10. 在Class的下拉列表框属性中,同样选择“从外部数据源获取选项”,在数据源中选择“班级信息”: 

 

11.点击上图中绿框标注的按钮:

12. 点击左下角的“筛选数据”,在弹出的对话框中点击“添加”:

13. 在右侧的下拉框中点击“选择域或组”:

14. 在弹出的对话框中,选择主数据源:

15. 选择“Grade”,点击“确定”:

16. 依次点击步骤10图中红框标注的按钮,选择“班级”:

17. 勾选下方的“仅显示具有唯一显示名称的条目”,点击确定:

18.表单模板到SharePoint,在SharePoint中查看效果:

  

       

 

【总结】

这种方法非常简易方便,尤其适合选项需要灵活调整的情况,只需在SharePoint列表中修改即可。

当然也可以不用SharePoint作为数据源,InfoPath2010提供了各种获取外部数据源的接口:

 

只要能够从数据源中获取到需要的数据,即可仿照以上步骤对数据进行筛选并显示在下拉列表框中。