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);
}效果图: