InfoPath开发:获取XML文件中的数据

本文示例源代码或素材下载

  本节的内容:

  如何在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文件的架构。

InfoPath开发实战(2):获取XML文件中的数据

  我们知道,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文件的设计界面中,简单的调整一下控件的尺寸,使其看起来如下图所示:

InfoPath开发实战(2):获取XML文件中的数据

  然后按F5键运行,可以看到InfoPath已经正确获取并显示了Google Picasa Web Album的相册列表:

InfoPath开发实战(2):获取XML文件中的数据

  效果看起来很棒,但到此为止,我们还没有编写一行代码。然而本例目前还只能读取我的Google Picasa Web Album的相册列表,下面我们来编写几行代码,把它改进成为一个InfoPath版的Google Picasa客户端浏览器。

  具体步骤如下:

  在“视图”面板中,选中唯一的视图,点击“视图属性”,在弹出的“视图属性”对话框中将视图名称修改为album;

  在“视图”面板中,点击“添加新视图”来新建一个名为login的视图;

  选中login视图,单击右键,选择【设为默认值】;

  在login视图中添加一个名为username的文本框控件;

  在login视图中添加一个标签为View Albums的按钮控件;

  简单地调整一下login视图的版式,使其看起来如下图所示:

InfoPath开发实战(2):获取XML文件中的数据

  然后右键单击View Albums按钮,选择【“按钮”属性】;

  在弹出的“按钮属性”对话框中点击“编辑表单代码”按钮,这会在FormCode.cs中生成一个CTRL2_5_Clicked方法(你的方法名称或许会和我的稍有不同)。

  在FormCode.cs中定义一个全局变量:string userName;

  在CTRL2_5_Clicked方法中输入以下代码:

publicvoidCTRL2_5_Clicked(objectsender,ClickedEventArgse)
    {
      try
      {
        userName=e.Source.SelectSingleNode("//my:username",this.NamespaceManager).Value;
        FileQueryConnectionconn=this.DataSources["getalbum"].QueryConnectionasFileQueryConnection;
        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("Cannotconnecttoalbumofspecifieduser.");
      }
    }

 

  下面简单地解释一下这段代码:

  首先以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视图,这时就可以看到该用户的相册列表了。

  还可以继续完善一下这个表单模板的功能,比如查看相册内容和单张照片。基本操作和代码都是一样的,就不赘述了。最终效果如下:

InfoPath开发实战(2):获取XML文件中的数据

 

来源:http://www.aobonet.com/Office/Office/200902/85318_2.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值