在前面的博文中,我曾經介紹過一種使用InfoPath默認值來實現下拉列表框級聯的方法,該方法在InfoPath2007時代FormService不支持篩選的情況下,解決了無代碼實現級聯的問題,但該方法在數據多的情況下顯得極爲繁瑣,本文中我將使用InfoPath2010介紹一種以SharePoint列表作爲數據源,實現下拉列表框級聯的方式,比較前一種方法,此方法更爲簡便靈活,易於操作。
在InfoPath2010中,我們注意到在InfoPath2007中“啓用瀏覽器功能的表單模板不支持篩選”的限制不見了,這意味着我們可以在FormService渲染的表單中篩選數據,使下拉列表框級聯成爲可能。
下面我以SharePoint列表作爲數據源爲例,講解一下實現的過程:
【題設】
學校裏每個年級擁有的班級數目都不同,在選擇班級時,我們需要先選擇年級,然後將該年級所包含的班級篩選出來以供用戶選擇。
【準備】
在SharePoint中創建自定義列表“班級信息”,其中包含字段:年級(單行文本)、班級(單行文本),並在其中填好所需的信息:
在InfoPath表單模板的數據源中添加兩個文本類型的域(元素):
【詳細步驟】
1. 在Ribbon工具欄中選擇“數據”標籤,點擊“自SharePoint列表”:
2. 在彈出的對話框中輸入列表“班級信息”的URL地址,點擊“下一步”:
3. 選擇“班級信息”,點擊“下一步”:
5. 點擊下一步,直到完成。
6. 在InfoPath的設計窗格中拖入兩個下拉列表框,分別綁定Grade和Class:
7. 在Grade的下拉列表框屬性中,選擇“從外部數據源獲取選項”,在數據源中選擇“班級信息”:
8. 依次點擊上圖中紅框標註的按鈕,選擇“年級”:
9. 勾選下方的“僅顯示具有唯一顯示名稱的條目”,點擊確定:
10. 在Class的下拉列表框屬性中,同樣選擇“從外部數據源獲取選項”,在數據源中選擇“班級信息”:
11.點擊上圖中綠框標註的按鈕:
12. 點擊左下角的“篩選數據”,在彈出的對話框中點擊“添加”:
13. 在右側的下拉框中點擊“選擇域或組”:
14. 在彈出的對話框中,選擇主數據源:
15. 選擇“Grade”,點擊“確定”:
16. 依次點擊步驟10圖中紅框標註的按鈕,選擇“班級”:
17. 勾選下方的“僅顯示具有唯一顯示名稱的條目”,點擊確定:
18.將表單模板到SharePoint,在SharePoint中查看效果:
【總結】
這種方法非常簡易方便,尤其適合選項需要靈活調整的情況,只需在SharePoint列表中修改即可。
當然也可以不用SharePoint作爲數據源,InfoPath2010提供了各種獲取外部數據源的接口:
只要能夠從數據源中獲取到需要的數據,即可仿照以上步驟對數據進行篩選並顯示在下拉列表框中。