原創|其它|編輯:郝浩|2009-07-30 10:07:49.000|閱讀 1273 次
概述:如果用前面兩篇文章的方法在重復表中實現聯動下拉列表框就會有問題。即當你更改重復表中的某一行上級下拉列表框時,所有行的下級下拉列表框的選項都會變成相同的內容。產生這種問題的原因是重復表中的所有行的下級下拉列表框都采用同一個輔助數據源
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
如果用前面兩篇文章的方法在重復表中實現聯動下拉列表框就會有問題。即當你更改重復表中的某一行上級下拉列表框時,所有行的下級下拉列表框的選項都會變成相同的內容。產生這種問題的原因是重復表中的所有行的下級下拉列表框都采用同一個輔助數據源,而任何一個上級下拉列表框變動時都會改變這個輔助數據源。要想解決這個問題,就必須為每個下級下拉列表框設置不同的數據源,筆者在infopathdev博客上發現一篇文章(參考資料[3]),從中找到了解決方案。
解決方案的思路是這樣的:在重復表中添加一個重復的域,將這個域作為下級下拉列表框的數據源;當同一行的上級下拉列表框變動時,程序將更新這個重復域。由于重復表的每行都有本行的重復域,所以每行的下級下拉列表框的數據源是不同的,不會相互影響。下面演示詳細實現步驟。
本例需要一個原始數據源,仍然使用上篇文章中創建的SharePoint列表——Cities。重復表中的重復域的值是它的一個子集,是根據上級下拉列表框的值過濾得來的。
1.表單上要放置一個重復表,重復表中放置兩個下拉列表框ddlb1和ddlb2,在主數據源中添加一個重復域ddlb2Source,如下圖。
2.確認域ddlb2Source的屬性框中選擇“重復”。
3.下拉列表框ddlb2的列表框項選擇“在表單數據源中查找值”,項選擇為“/my:myFields/my:group1/my:group2/my:ddlb2Source”。
4.下拉列表框ddlb1屬性的“瀏覽器表單”頁,確認回發設置為“始終”。
5.創建數據連接,指向SharePoint列表Cities,方法參見上一篇文章。
6.確認“啟用瀏覽器兼容性功能”,確認安全級別為“完全信任”,方法參見上一篇文章。
在InfoPath表單設計界面右鍵點擊ddlb1,在出現的菜單中選擇編程/Changed事件,進入VSTA編程環境。在ddlb1_Changed事件中插入下面代碼。
添加代碼后的VSTA編程界面如下圖。
方法略,參見上一篇文章。
方法略,參見上一篇文章。
新建表單測試一下,界面如下圖。
這種方法雖然可以在重復表中實現聯動下拉列表框,但是性能不是太好。由于重復表中每行都要存儲一個下拉列表框的數據源,如果重復表的行比較多,則性能必然會受到影響,這是該解決方案的主要缺點,目前沒有更好的解決方案。我們期待InfoPath的下一版本能解決這個問題。
源碼下載:ddlbEx3.rar
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園