InfoPath Forms Services中实现联动下拉列表框

    最近参与的InfoPath Forms Services的项目,需要实现下拉列表的联动。我在网上搜索了不少资料,其中有一种解决的方案:http://blogold.chinaunix.net/u/18783/showart_2199801.html

    但这种解决方案没有考虑到显示值和值的区分。

    现在考虑用其他的方式。

数据源设置:

节点设置:

二级节点关联设置:

关键部分代码,针对省份_Changed事件的处理: 

public void 省份_Changed(object sender, XmlEventArgs e)
{
if (!e.NewValue.Equals(string.Empty))
{
//备选项,也可以根据业务连接数据库或者读取XML文件
string[] HubeiCityKeyList ={ "武汉", "襄樊" };
string[] HubeiCityValueList ={ "Wuhan", "Xiangfan" };
string[] HunanCityKeyList ={ "长沙", "邵阳" };
string[] HunanCityValueList ={ "Changsha", "Shaoyang" };

CreateNavigator().SelectSingleNode(
"/my:myFields/my:市", NamespaceManager).SetValue(string.Empty);
switch (e.NewValue)
{
case "湖北省":
{
InsertNode(HubeiCityKeyList, HubeiCityValueList);
break;
}
case "湖南省":
{
InsertNode(HunanCityKeyList, HunanCityValueList);
break;
}
}
}
else
{
ClearCityNode();
}
}

private void InsertNode(string[] keyArray,string[] valueArray)
{
ClearCityNode();
//添加备选节点
int j = 0;
XPathNavigator oXPathNavigator
= null;
for (int i = 0; i < keyArray.Length; i++)
{
oXPathNavigator
= CreateNavigator().SelectSingleNode("/my:myFields/my:市备选[last()]", NamespaceManager);
oXPathNavigator.SelectSingleNode(
"my:市备选key", NamespaceManager).SetValue(keyArray[i]);
oXPathNavigator.SelectSingleNode(
"my:市备选value", NamespaceManager).SetValue(valueArray[i]);
oXPathNavigator.InsertAfter(oXPathNavigator.OuterXml);
j
++;
}
if (j > 0) oXPathNavigator.DeleteSelf();
}

private void ClearCityNode()
{
//清空备选节点
for (int i = 0; i < CreateNavigator().Select("/my:myFields/my:市备选", NamespaceManager).Count - 1; i++)
{
CreateNavigator().SelectSingleNode(
"/my:myFields/my:市备选[last()]", NamespaceManager).DeleteSelf();
}
CreateNavigator().SelectSingleNode(
"/my:myFields/my:市备选/my:市备选key", NamespaceManager).SetValue(string.Empty);
CreateNavigator().SelectSingleNode(
"/my:myFields/my:市备选/my:市备选value", NamespaceManager).SetValue(string.Empty);

}
效果图:





posted @ 2011-06-23 14:23  Mr``J  阅读(264)  评论(0编辑  收藏  举报