问题:当Infopath表单选择以浏览器形式打开时,图片功能控件是不兼容的,此时要在InfoPath中展示图片必须采用其他方式
解决方案:
创建一个重复表,结构为:Pictures
Picture
title
image
添加数据连接,获取图片,图片保存在SharePoint图片库中,链接为CumListConn,SharePoint中List为CumList
在InfoPath表单Loading事件中添加下面代码:
XPathNodeIterator iter = this.DataSources["CumListConn"].CreateNavigator().Select("/dfs:myFields/dfs:dataFields/dfs:CumList", NamespaceManager);
foreach (XPathNavigator pic in iter)
{
// XPathNavigator pic = iter.Current;
string title = pic.SelectSingleNode("@Title", NamespaceManager).Value;
string url = "http://<server_name>/MyPictures/" + title + ".jpg";
addImageToTable(title, url);
}
// Remove the first empty row from the repeating table
XPathNavigator mainDSNav = MainDataSource.CreateNavigator();
if (String.IsNullOrEmpty(mainDSNav.SelectSingleNode( "/my:myFields/my:pictures/my:picture[1]/my:title", NamespaceManager).Value)
&& String.IsNullOrEmpty(mainDSNav.SelectSingleNode("/my:myFields/my:pictures/my:picture[1]/my:image", NamespaceManager).Value))
{
XPathNavigator nav = mainDSNav.SelectSingleNode(
"/my:myFields/my:pictures/my:picture[1]", NamespaceManager);
nav.DeleteSelf();
}
addImageToTable方法代码:
public void addImageToTable(string title, string url)
{
// Create a row for the picture
XmlDocument doc = new XmlDocument();
XmlNode group = doc.CreateElement("picture", NamespaceManager.LookupNamespace("my"));
XmlNode field = doc.CreateElement("title", NamespaceManager.LookupNamespace("my"));
XmlNode node = group.AppendChild(field);
node.InnerText = title;
field = doc.CreateElement("image", NamespaceManager.LookupNamespace("my"));
node = group.AppendChild(field);
node.InnerXml = "<img xmlns=/"http://www.w3.org/1999/xhtml/" src=/"" + url + "/"/>";
field = doc.CreateElement("notes", NamespaceManager.LookupNamespace("my"));
doc.AppendChild(group);
// Add the picture to the repeating table
XPathNavigator mainDSNav = MainDataSource.CreateNavigator();
mainDSNav.SelectSingleNode("/my:myFields/my:pictures", NamespaceManager).AppendChild(doc.DocumentElement.CreateNavigator());
}