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

    技术2022-05-11  86

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

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

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

    2 对于重复的数据域(Group中的数据域),如果一个group需要和一个外部数据连接绑定时,除了绑定域的设置,还需要设置数据过滤条件。例如:一个讲师的Group需要和一个外部数据连接GetSpeakers绑定。数据域的结构Speaker(Group)            |----SpeakerName (Field)             |----SpeakerID (Field) 外部数据连接:GetSpeakers的返回xmlmyFields   |--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)