infopath中界面控件和数据源的绑定

infopath中界面控件和数据源的绑定

infopath提供了很好的界面设计器,可以非常方便地将数据源中的数据域和界面上的输入控件绑定。这样用户的输入就会纪录在最终的xml结果文件中。

常用的绑定方式
1 对于不重复的数据域的绑定是非常简单的。 在定义了数据源之后,把数据域直接托拽到View中,一个默认的界面控件就产生了,它的绑定域指向了这个数据域。
你可以改变控件的类型。方法是选中这个控件,右键菜单中选择change to,然后从列表中选择新的控件类型。
你也可以修改一个控件的绑定域,方法是选中这个控件,右键菜单中选择change binding,然后重新选择绑定域。

2 对于重复的数据域(Group中的数据域),如果一个group需要和一个外部数据连接绑定时,除了绑定域的设置,还需要设置数据过滤条件。
例如:一个讲师的Group需要和一个外部数据连接GetSpeakers绑定。
数据域的结构
Speaker(Group)
            |----SpeakerName (Field)
            |----SpeakerID (Field)
外部数据连接:GetSpeakers的返回xml
myFields
   |--dataFields
        |--Speaker
             |--Alias
             |--ID
界面控件是一个讲师姓名的列表(dropdownlist),绑定到SpeakerName数据域。要求当用户从界面控件选择SpeakerName时,自动将该讲师的ID记录到SpeakerID中。
在列表的属性里,设置rule.新建一个set id的规则,Action选择Set a field's value,有两个参数。
第一个是被赋值的field,选择SpeakerID。
第二个参数是赋值的value,先选择外部数据连接GetSpeakers的ID,然后打开Edit xPath的高级按钮,看到具体的取值方法:xdXDocument:GetDOM("GetSpeaker")/dfs:myFields/dfs:dataFields/dfs:Speaker/@ID
注意:如果按照这样的设置。每次取到的值都是GetSpeakers的第一个讲师的ID,而不是当前被选中名字的讲师的ID,这是因为GetSpeakers返回的结果不是一个讲师,而是多个,如果只取一个结果,则自动将第一个返回。
怎么办,需要加上判断条件,因为每个讲师的名字都是不同的,我们将使用被选中讲师的名字作为过滤条件,从GetSpeakers中过滤出那个讲师对应的ID
将公式改为xdXDocument:GetDOM("GetSpeaker")/dfs:myFields/dfs:dataFields/dfs:Speaker/@ID[@Alias = current()/../SpeakerName]
[@Alias = current()/../SpeakerName]是这个取值公式的过滤条件. @Alias是GetSpeakers中Alias的值,current()/../SpeakerName是当前group的SpeakerName的值。current()/../SpeakerName的语法和文件目录的语法一样。current()表示当前节点,..是上一级。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值