InfoPath开发实战(2):获取XML文件中的数据
2009-01-19 08:38 Windie Chai 阅读(5104) 评论(10) 编辑 收藏 举报本节的内容:
- 如何在InfoPath中使用数据连接来从XML文件中获取数据
- 如何通过代码来修改数据连接中的XML文件路径
打开Visual Studio 2008,以“InfoPath 2007表单模板”为项目模板新建一个项目。
项目创建完后,就会看到一个空空如也的mainifest.xsf文件,这就是InfoPath表单的设计区域,我们可以使用“工具箱”和“版式”面板来设计表单。
我们先不急于设计表单,而是添加一个数据连接。为了让示例更加有趣,我选择了Google Picasa Web Album的RSS作为外部数据,InfoPath表单将从RSS文件中获取相册列表并呈现出来。
添加此数据连接的方法如下:
- 在“数据源”面板中点击“管理数据连接”;
- 在弹出的“数据连接”对话框中点击“添加”;
- 在弹出的“数据连接向导”对话框中选择“新建连接”和“仅接收数据”,点击“下一步”;
- 选择“XML文档”作为数据源,点击“下一步”;
- 在XML位置文本框中输入一个Google Picasa Web Album的相册RSS地址,点击“下一步”;
- 选择“从指定位置访问数据”,点击“下一步”;
- 输入名称“getalbum”,勾选“在打开表单时自动检索数据”,点击“完成”。
此时在打开“数据源”面板,将数据源切换为刚才创建“getalbum(辅助)”,会看到InfoPath已经导入了该RSS文件的架构。
我们知道,RSS中表示具体条目的元素是item,在上图所示的RSS架构中,item元素被正确的识别为一个“重复项”。
接下来我们来添加一些控件并绑定到item及其子元素上,藉此来显示所有的相册,方法如下:
- 点击item元素旁的下箭头按钮,在其上下文菜单中选择【重复节】,这会在mainifest.xsf文件的设计界面中添加一个重复节控件,并且该控件绑定到了getalblum数据源的item元素上;
- 将光标定位到重复节控件内部,然后在“数据源”面板中选中item的子元素title,在其上下文菜单中点击【其他】;
- 在弹出的“选择控件”对话框中选择“表达式框”,点击“确定”,这会在重复节中添加一个用于显示相册标题的表达式框控件,并且该控件绑定到了item/title上。
- 将光标定位到重复节控件内部,然后在“数据源”面板中依次展开item/media:group/thumbnail,选中thumbnail的子元素url,在其上下文菜单中点击【其他】;
- 在弹出的“选择控件”对话框中选择“图片”,点击“确定”,这会在重复节中添加一个用于显示相册缩略图的图片控件,并且该控件绑定到了item/media:group/thumbnail/url上。
然后回到mainifest.xsf文件的设计界面中,简单的调整一下控件的尺寸,使其看起来如下图所示:
然后按F5键运行,可以看到InfoPath已经正确获取并显示了Google Picasa Web Album的相册列表:
效果看起来很棒,但到此为止,我们还没有编写一行代码。然而本例目前还只能读取我的Google Picasa Web Album的相册列表,下面我们来编写几行代码,把它改进成为一个InfoPath版的Google Picasa客户端浏览器。
具体步骤如下:
- 在“视图”面板中,选中唯一的视图,点击“视图属性”,在弹出的“视图属性”对话框中将视图名称修改为album;
- 在“视图”面板中,点击“添加新视图”来新建一个名为login的视图;
- 选中login视图,单击右键,选择【设为默认值】;
- 在login视图中添加一个名为username的文本框控件;
- 在login视图中添加一个标签为View Albums的按钮控件;
- 简单地调整一下login视图的版式,使其看起来如下图所示:
- 然后右键单击View Albums按钮,选择【“按钮”属性】;
- 在弹出的“按钮属性”对话框中点击“编辑表单代码”按钮,这会在FormCode.cs中生成一个CTRL2_5_Clicked方法(你的方法名称或许会和我的稍有不同)。
- 在FormCode.cs中定义一个全局变量:string userName;
- 在CTRL2_5_Clicked方法中输入以下代码:
{
try
{
userName = e.Source.SelectSingleNode("//my:username", this.NamespaceManager).Value;
FileQueryConnection conn = this.DataSources["getalbum"].QueryConnection as FileQueryConnection;
conn.FileLocation = "http://picasaweb.google.com/data/feed/base/user/"
+ userName
+ "?alt=rss&kind=album&hl=zh_cn&access=public";
conn.Execute();
this.ViewInfos.SwitchView("album");
}
catch
{
MessageBox.Show("Cannot connect to album of specified user.");
}
}
下面简单地解释一下这段代码:
- 首先以XPath方式获取用户在username文本框中输入的值,将它存入变量userName;
- 然后获取辅助数据源getalbum的QueryConnection,并将它转换为实际类型FileQueryConnection,FileQueryConnection是XML文档数据源的数据连接类型。
- 接着就可以根据userName来为FileQueryConnection生成新的FileLocation路径了。
- 调用FileQueryConnection的Execute方法执行数据源,来获取辅助数据源中的数据,执行后,album相册中绑定到辅助数据源的数据也会得到更新;
- 最后调用表单的ViewInfos.SwithchView方法来切换到album视图。
仍然按F5来预览效果,首先显示的是login视图,我们输入一个Google Picasa Web Album的用户名(注意不是邮箱,是"http://picasaweb.google.com/username”中的username),点击View Albums按钮,InfoPath获取完数据之后,就会切换到album视图,这时就可以看到该用户的相册列表了。
还可以继续完善一下这个表单模板的功能,比如查看相册内容和单张照片。基本操作和代码都是一样的,就不赘述了。最终效果如下:
示例源码:点击下载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述