2013-03-05 51 views
0

我有一個問題給你明亮的頭腦的靈魂。對於Sharepoint列表,我有一個Infopath表單(意思是這個表單被認爲是一個Infopath列表表單),我希望某些行爲......我不太確定如何實現它。Infopath和Cascading Dropdowns

要點是,我在窗體上有兩個下拉菜單,我希望第二個下拉菜單根據第一個下拉菜單選擇來更改其值。

兩者都指向相同的列表。該列表看起來像這樣:

ID, ModuleName, SystemName, PayCode, LineOfBusoness 
1, Mod1, Sys1, O, LOB1 
2, Mod2, Sys2, O, LOB2 
3, Mod3, Sys3, C, LOB3 
4, Mod3, Sys4, O, LOB3 

第一個下拉只包含paycodes,所以基本上「O」和「C」。

現在第二個下拉列表變得棘手。

第二個下拉菜單是根據上一個下拉列表中選擇的PayCode從該列表中顯示所有業務線(LOB)。如果他們選擇「O」,那麼只顯示所有支付代碼爲「O」的LOB。

但是...如果他們選擇「C」...那麼他們已經選擇了系統和模塊的窗體上也有下拉菜單...所以它會採用那些被選中的值並選擇列表中包含他們選擇的系統,他們選擇的模塊以及他們選擇的支付代碼。

我該怎麼做?我的第一個想法很好,只是使用代碼...但事實證明,Infopath不允許在「列表窗體」上使用自定義代碼,這是... wtf?那麼下一個選項是使用「級聯下拉」方法,您也可以使用規則和過濾器來嘗試實現此行爲。

可以這樣做嗎?你對如何解決這個問題有什麼想法?

在此先感謝,如果您需要更多信息,請讓我知道!

回答

0

執行此操作的一種方法是在後面的代碼中。

取下第一個下拉列表,找到它關聯的字段,右鍵單擊並創建「更改」事件。

在事件背後的代碼中,將爲該字段創建一個Changed事件。在那裏,您可以獲取第一個下拉列表中當前所選項目的值。根據該值,您可以修改第二個下拉菜單的內容。

通過抓取原始列表並運行SPQuery來選擇所有具有「O」或「C」或任何選定值的項目。您也可以在所有列表的項目上運行linq或foreach語句,無論您喜歡什麼:)

注意:確保在屬性的瀏覽器窗體選項卡中選擇「總是」下拉列表控件屬性(右鍵單擊在下拉列表中訪問這些屬性)

希望這有助於!

+0

謝謝邁爾。那是我最初的意圖,而且會很容易做!但是,這是一個Sharepoint列表表單而不是一個表單庫表單。列表表單不允許自定義代碼(後面的代碼),這就是爲我扔東西的東西。有關表單類型之間的差異,請參閱以下內容:http://blogs.msdn.com/b/infopath/archive/2010/04/22/comparing-list-and-form-library-forms.aspx – Ryan 2013-03-06 00:33:47