infopath表单中将值显示在多选列表框中以及获取多选列表框中选中的值

最近做一个项目,遇到一个棘手的问题:如何将值显示在多选列表框中以及获取多选列表框中选中的值。尝试好几种方法,最后还是以失败告终。后来我尝试分两步走,第一步:添加一个多选列表框控件,将数据源绑定到多选列表框控件中;第二步:添加一个文本框控件,负责存储初始值以及接收多选列表框中选定的值,以“;”分隔。具体代码如下:

(1):将多选列表框中选中的值清空。

//nodeName:多选列表框中显示节点的XPath路径
private
void deleteAllItems(string nodeName)
{
XPathNodeIterator factoryIterator = this.CreateNavigator().Select(nodeName, this.NamespaceManager);
while (factoryIterator.MoveNext())
{
if (factoryIterator.Current != null)
{
factoryIterator.Current.DeleteSelf();
}
}
if (factoryIterator.Count > 0)
{
deleteAllItems(nodeName);
}
}

(2):将初始值显示到多选列表框中。

//repeatName:所选列表框的XPath路径
//nodeName:多选列表框中显示节点名称
//saveNodeName:存储初始值的文本框控件的XPath路径
private
void writeIntoTable(string repeatName,string nodeName,string saveNodeName)
{
//删除选中的选项
deleteAllItems(repeatName + "/my:" + nodeName);
string[] factoryList = this.CreateNavigator().SelectSingleNode(saveNodeName, this.NamespaceManager).Value.Split(';');
foreach (string factoryName in factoryList)
{
XmlDocument document = new XmlDocument();
XmlNode factoryNode = document.CreateElement(nodeName, this.NamespaceManager.LookupNamespace("my"));
XmlNode childNode = document.AppendChild(factoryNode);
childNode.InnerText = factoryName;
this.MainDataSource.CreateNavigator().SelectSingleNode(repeatName, this.NamespaceManager).AppendChild(document.DocumentElement.CreateNavigator());
}
}

(3):用户在多选列表框中选择了条目后,将多选列表框选中的值写入到文本框控件中。

//nodeName:多选列表框中显示节点的XPath路径
//saveNodeName:存储初始值的文本框控件的XPath路径。
private
void setApplierFactory(string nodeName,string saveNodeName)
{
string factoryName = "";
XPathNodeIterator factoryIterator = this.CreateNavigator().Select(nodeName, this.NamespaceManager);
while (factoryIterator.MoveNext())
{
if (!string.IsNullOrEmpty(factoryIterator.Current.InnerXml))
{
factoryName += factoryIterator.Current.InnerXml + ";";
}
}
XPathNavigator factory = this.CreateNavigator().SelectSingleNode(saveNodeName, this.NamespaceManager);
factory.SetValue(factoryName);
}

如此,虽然操作麻烦些,但至少可以解决实际问题。呵呵……如果大家还有更好的方法,不妨分享分享。



posted @ 2011-12-02 16:29  至_善  阅读(923)  评论(1编辑  收藏  举报