2013-03-05 53 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