2. 使用自定义验证事件
使用自定义验证事件需要编写C#代码进行数据的有效性验证,因为Infopath内置了VSTA编程接口,使得我们可以非常方便地通过Visual Studio为Infopath编写C#代码以完成一些特定的功能。在这里要注意一下,编写本文时我本机的开发环境是Visual Studio 2008 + Office 2007,在安装Office 2007时必须手动将Infopath项下的VSTA选项勾上,否则Infopath默认是不支持VSTA编程接口的。Infopath中的VSTA默认使用的Visual Studio 2005的开发环境,读者不需要特定去安装Visual Studio 2005,默认情况下VSTA会将所需的程序及环境配置好。
右键单击要设置数据有效性验证的控件,选择“编程”-“Validating事件”,此时Infopath会联系Visual Studio打开VSTA工程,在VSTA工程中,我们可以为事件添加自定义方法。有一个地方需要说明,默认情况下Infopath会以VB.NET语言创建VSTA工程,如果你想更改工程语言,可以点击“工具”-“选项”,在“设计”选项卡中将语言选为C#,同时你还可以设置工程的默认保存位置。如果之前你已经创建了VB.NET语言的VSTA工程,可以通过“工具”-“表单选项”,在“编程”选项卡中删除代码,然后重新创建新的VSTA工程,在此处也可以选择本Infopath表单的VSTA工程的存放位置。
我们在VSTA中添加如下代码,以实现我们在上例中限制只接受数字类型的数据验证效果。
保存代码并关闭Visual Studio,保存或发布编写好的Infopath表单,然后直接打开表单实例,在所要验证的域中输入内容,当验证失败时Infopath会按照验证事件代码中的要求弹出相应的提示。在按钮上使用规则或验证事件进行数据有效性验证
在Infopath中,除了上面介绍的两种方法可以实现数据的有效性验证外,我们还可以通过给表单上的按钮设置规则及验证事件来验证域的数据有效性。
1. 使用规则进行数据有效性验证
例如表单中有一个文本框,一个表达式框和一个按钮,我们想验证用户在文本框中输入的值是否为一个数字,并且将信息显示在表达式框中。按照下面的步骤给按钮添加规则:
右键单击按钮点击“属性”,或者直接双击按钮,在弹出的对话框中点击“规则”按钮。在“规则”对话框中点击“添加”。在“规则”对话框中点击“添加操作”。在“操作”对话框中,从“操作”下拉列表中选择“设置域值”。点击“域”后面的按钮,在弹出的对话框中选择表达式框所绑定的域,点击“确定”关闭对话框。保持“操作”对话框中“值”文本框为空,点击“确定”关闭,然后关闭“规则”对话框。此时在“规则”对话框中已经添加了一条新的规则,其作用是当按钮点击时清空表达式框中的值。按照前面的步骤再添加一条规则,同样绑定到表达式框上,并将值设置成“仅允许数字”。给规则2设置条件,在“条件”对话框中,选择要进行验证的域(此处应该是文本框所对应的域),然后选择“不匹配模式”,同时设置匹配的正则表达式为-?[0-9]*.?[0-9]+确定并关闭所有的对话框当用户打开表单实例时,在文本框中输入非数字,然后点击按钮,此时表达式框中会出现相应提示;如果用户输入的内容符合验证规则,则表达式框中的内容被清空。
2. 在按钮上使用验证事件进行数据有效性验证
右键单击按钮点击“属性”,或者直接双击按钮,在“属性”对话框中点击“编辑表单代码”,在VSTA工程代码中已经新添加了一个按钮事件,添加下面的代码:
注意:在Infopath中,所有的数据验证仅会给出相应的提示信息,用户可以强制保存表单并忽略数据有效性验证的提示信息。另外,本文C#代码中所使用的主数据源节点名称(如my:field1,my:field2等)因实际情况而异。