InfoPath表单托管代码示例
2010-11-15 18:05
302 查看
前段时间项目中一个有多个View的Form需要使用代码来完成一些特殊的功能,网上的资料不太好找,现整理出来,全当抛砖引玉。注意:InfoPath编码思想比较特别,控件都是绑定到数据源上,修改的都是数据源,而不是通过控件的属性来修改。
1、获取非主数据源
XPathNavigator myNavigator = this.DataSources["SecondaryDataSource"].CreateNavigator();
MessageBox.Show(myNavigator.OuterXml.ToString(),"Secondary Data Source XML");
2、获取当前View的信息
if (this.CurrentView.ViewInfo.Name == "ViewName") //判断当前View名称
{ }
在public void FormEvents_ViewSwitched(object sender, ViewSwitchedEventArgs e)事件中可以使用以上判断来对特定的View进行操作。
3、获取/设置某个数据源的值,
XPathNavigator root = this.MainDataSource.CreateNavigator();
XPathNavigator nameField = root .SelectSingleNode("/my:myFields/my:MainName/my:name", NamespaceManager);
nameField.SetValue("Hello");
string >
4、遍历Repeat控件,获取用户输入的数据
string message="";
XPathNavigator root = MainDataSource.CreateNavigator();
XPathNodeIterator nameNodes = root.Select("/my:myFields/my:MainName/my:name", NamespaceManager);
while (nameNodes.MoveNext())
{
message += nameNodes.Current.Value + System.Environment.NewLine;
}
MessageBox.Show(message);
5、动态添加控件
CurrentView.ExecuteAction(ActionType.XCollectionInsert, "Group_1");
6、使数据源所对应的文本值处于选中状态
XPathNavigator textNode = CreateNavigator().SelectSingleNode("/my:myFields/my:field1", NamespaceManager);
CurrentView.SelectText(textNode);
CurrentView.ExecuteAction(ActionType.Cut);
7、调用WebService
// Open connection.
WebServiceConnection wsc = (WebServiceConnection)this.DataConnections["Main query"];
// Create XmlDocuments.
XmlDocument inputDocument = new XmlDocument();
XmlDocument outputDocument = new XmlDocument();
XmlDocument errorsDocument = new XmlDocument();
// Load input document.
inputDocument.LoadXml("<inputValue1>Test</inputValue1><inputValue2>5</inputValue2>");
// Create XPathNavigator objects for documents.
XPathNavigator inputNav = inputDocument.CreateNavigator();
XPathNavigator outputNav = outputDocument.CreateNavigator();
XPathNavigator errorsNav = errorsDocument.CreateNavigator();
// Call Execute method.
wsc.Execute(inputNav, outputNav, errorsNav);
获取Repeat控件内部的数据时,我采用DataSet存储,因为我发现遍历每个Repeat时,无法遍历其下子控件的值。比如。Repeat DataTable有3个,子控件TextBox控件的值也有3个。通过XPathNodeIterator实例遍历DataTable的时候无法获取对应的TextBox的值,默认都是获取第一次出现的值,所以只好借助于DataRow分别遍历给不同的Column赋值。不知道园子里谁有更好的方法,请告知。谢谢
1、获取非主数据源
XPathNavigator myNavigator = this.DataSources["SecondaryDataSource"].CreateNavigator();
MessageBox.Show(myNavigator.OuterXml.ToString(),"Secondary Data Source XML");
2、获取当前View的信息
if (this.CurrentView.ViewInfo.Name == "ViewName") //判断当前View名称
{ }
在public void FormEvents_ViewSwitched(object sender, ViewSwitchedEventArgs e)事件中可以使用以上判断来对特定的View进行操作。
3、获取/设置某个数据源的值,
XPathNavigator root = this.MainDataSource.CreateNavigator();
XPathNavigator nameField = root .SelectSingleNode("/my:myFields/my:MainName/my:name", NamespaceManager);
nameField.SetValue("Hello");
string >
4、遍历Repeat控件,获取用户输入的数据
string message="";
XPathNavigator root = MainDataSource.CreateNavigator();
XPathNodeIterator nameNodes = root.Select("/my:myFields/my:MainName/my:name", NamespaceManager);
while (nameNodes.MoveNext())
{
message += nameNodes.Current.Value + System.Environment.NewLine;
}
MessageBox.Show(message);
5、动态添加控件
CurrentView.ExecuteAction(ActionType.XCollectionInsert, "Group_1");
6、使数据源所对应的文本值处于选中状态
XPathNavigator textNode = CreateNavigator().SelectSingleNode("/my:myFields/my:field1", NamespaceManager);
CurrentView.SelectText(textNode);
CurrentView.ExecuteAction(ActionType.Cut);
7、调用WebService
// Open connection.
WebServiceConnection wsc = (WebServiceConnection)this.DataConnections["Main query"];
// Create XmlDocuments.
XmlDocument inputDocument = new XmlDocument();
XmlDocument outputDocument = new XmlDocument();
XmlDocument errorsDocument = new XmlDocument();
// Load input document.
inputDocument.LoadXml("<inputValue1>Test</inputValue1><inputValue2>5</inputValue2>");
// Create XPathNavigator objects for documents.
XPathNavigator inputNav = inputDocument.CreateNavigator();
XPathNavigator outputNav = outputDocument.CreateNavigator();
XPathNavigator errorsNav = errorsDocument.CreateNavigator();
// Call Execute method.
wsc.Execute(inputNav, outputNav, errorsNav);
获取Repeat控件内部的数据时,我采用DataSet存储,因为我发现遍历每个Repeat时,无法遍历其下子控件的值。比如。Repeat DataTable有3个,子控件TextBox控件的值也有3个。通过XPathNodeIterator实例遍历DataTable的时候无法获取对应的TextBox的值,默认都是获取第一次出现的值,所以只好借助于DataRow分别遍历给不同的Column赋值。不知道园子里谁有更好的方法,请告知。谢谢
相关文章推荐
- InfoPath表单托管代码示例
- 如何解决带托管代码的infopath表单上传中的“正在删除”问题
- 如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片
- 用代码访问InfoPath表单内容
- ajax异步处理POST表单中的数据示例代码
- [windpole]在SharePoint Workflow中使用“包含逻辑代码的InfoPath表单”
- js 判断文件类型并控制表单提交示例代码
- bootstrap表单示例代码分享
- Jquery插件easyUi表单验证提交(示例代码)
- SharePoint【深入浅出InfoPath】-- 手工绑定托管代码
- 发布一个域安全级别的无代码InfoPath表单作为文档库模版 (InfoPath 一)
- js 判断文件类型并控制表单提交示例代码
- javascript获取form里的表单元素的示例代码
- JS判断表单输入是否为空(示例代码)
- 2010Infopath包含代码表单如何发布
- 表单(打开单据、列表、动态表单、简单、SQL帐表)示例代码
- 用代码获取SharePoint站点中InfoPath表单的数据
- 用代码获取SharePoint站点中InfoPath表单的数据
- 用代码获取SharePoint站点中InfoPath表单的数据
- js 使FORM表单的所有元素不可编辑的示例代码