欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Infopath中實(shí)現(xiàn)數(shù)據(jù)有效性驗(yàn)證的三種方法

 更新時(shí)間:2010年06月01日 18:51:02   作者:  
Infopath是微軟Office辦公軟件家族中的成員之一,它主要的功能是面向客戶端收集XML數(shù)據(jù),并按照預(yù)期定義的格式生成XML文件,它以可視化表單的形式收集數(shù)據(jù),并且支持C#編程接口以及外部數(shù)據(jù)源等。
Infopath的使用避免了最終用戶以完全手寫(xiě)的方式生成XML數(shù)據(jù)文件,同時(shí)也可以統(tǒng)一XML文件的格式,在MOSS系統(tǒng)和網(wǎng)站開(kāi)發(fā)中被廣泛使用。

  使用Infopath開(kāi)發(fā)一個(gè)XML前端表單頁(yè)面需要有幾個(gè)特定的步驟,如編寫(xiě)XML示例文件,生成XML Schema文件,在Infopath中導(dǎo)入主數(shù)據(jù)源,設(shè)計(jì)Infopath表單呈現(xiàn),如果需要還可以給表單添加C#事件代碼,如表單打開(kāi)、保存時(shí)所要執(zhí)行的動(dòng)作,附加按鈕的執(zhí)行動(dòng)作等。讀者如果對(duì)Infopath的開(kāi)發(fā)有興趣可以單獨(dú)去研究,本文主要介紹在Infopath中如何實(shí)現(xiàn)數(shù)據(jù)的有效性驗(yàn)證。

  在Infopath中,有三種方法可以實(shí)現(xiàn)數(shù)據(jù)的有效性驗(yàn)證:

  1. 使用Infopath的內(nèi)置數(shù)據(jù)類型。

  2. 給輸入項(xiàng)添加自定義數(shù)據(jù)驗(yàn)證條件或驗(yàn)證事件。

  3. 通過(guò)給表單自定義按鈕添加規(guī)則或驗(yàn)證事件來(lái)進(jìn)行數(shù)據(jù)有效性驗(yàn)證。

 

使用Infopath內(nèi)置數(shù)據(jù)類型進(jìn)行數(shù)據(jù)的自動(dòng)驗(yàn)證

  這是最簡(jiǎn)單的數(shù)據(jù)驗(yàn)證方法。在Infopath中添加控件,或給主數(shù)據(jù)源中的域指定控件的時(shí)候,可以為控件的輸入指定數(shù)據(jù)類型。如果沒(méi)有為Infopath指定單獨(dú)的主數(shù)據(jù)源,那么Infopath將按照你在表單中添加的控件來(lái)構(gòu)建數(shù)據(jù)源結(jié)構(gòu);如果在表單編輯之前已經(jīng)指定了主數(shù)據(jù)源,則控件所接受的數(shù)據(jù)類型依賴于它所綁定的數(shù)據(jù)源中域的數(shù)據(jù)類型,數(shù)據(jù)源中域的數(shù)據(jù)類型可在編寫(xiě)XML Schema文件時(shí)單獨(dú)指定,如果沒(méi)有指定,默認(rèn)為String類型,表示可接受任何類型的數(shù)據(jù)。

在Infopath中右鍵單擊要設(shè)置數(shù)據(jù)有效性驗(yàn)證的控件,點(diǎn)擊“屬性”,或者直接雙擊該控件,在彈出的對(duì)話框中設(shè)置控件的數(shù)據(jù)類型,如下圖: 2010-5-30 12-06-16   Infopath支持下列數(shù)據(jù)類型:

文本(string)整數(shù)(integer)小數(shù)(double)布爾(True/False)超鏈接(anyURI)日期(date)時(shí)間(time)日期和時(shí)間(datetime)

  在屬性對(duì)話框中,我們還可以設(shè)置數(shù)據(jù)的默認(rèn)值,以及數(shù)據(jù)格式等。當(dāng)設(shè)置了控件的數(shù)據(jù)類型后,最終用戶在填寫(xiě)表單時(shí)如果類型不匹配則Infopath會(huì)給出相應(yīng)的提示信息,如: 2010-5-30 12-16-42

使用自定義數(shù)據(jù)驗(yàn)證條件或驗(yàn)證事件進(jìn)行數(shù)據(jù)有效性驗(yàn)證

   你可以在Infopath中設(shè)置自定義數(shù)據(jù)驗(yàn)證條件或編寫(xiě)自定義事件進(jìn)行數(shù)據(jù)的有效性驗(yàn)證,這需要一些額外的編程開(kāi)銷或計(jì)算機(jī)編程方面的知識(shí)。

  1. 使用自定義數(shù)據(jù)驗(yàn)證條件

  右鍵單擊要設(shè)置數(shù)據(jù)有效性驗(yàn)證的控件,點(diǎn)擊“屬性”,或者直接雙擊該控件,在彈出的對(duì)話框中點(diǎn)擊“數(shù)據(jù)驗(yàn)證”按鈕,在彈出的對(duì)話框中點(diǎn)擊“添加”,在數(shù)據(jù)驗(yàn)證對(duì)話框中設(shè)置數(shù)據(jù)驗(yàn)證條件,并填寫(xiě)當(dāng)數(shù)據(jù)驗(yàn)證失敗時(shí)屏幕的提示信息以及警告對(duì)話框要顯示的消息內(nèi)容。

Infopath已經(jīng)集成了很多數(shù)據(jù)驗(yàn)證條件方便用戶直接選擇,如域中的值大于、小于、等于、包含、不包含等等,如果你想定義自己的匹配模式,可以選擇“匹配模式”或“不匹配模式”,然后在第三個(gè)下拉列表中選擇“選擇模式”,在彈出的對(duì)話框中編寫(xiě)自定義模式正則表達(dá)式。例如你想規(guī)定該域只能接受包含小數(shù)點(diǎn)的數(shù)字,你可以編寫(xiě)如下正則:

復(fù)制代碼 代碼如下:

-?[0-9]*\.?[0-9]+

然后設(shè)置警告信息: 2010-5-30 12-44-04

  2. 使用自定義驗(yàn)證事件

  使用自定義驗(yàn)證事件需要編寫(xiě)C#代碼進(jìn)行數(shù)據(jù)的有效性驗(yàn)證,因?yàn)镮nfopath內(nèi)置了VSTA編程接口,使得我們可以非常方便地通過(guò)Visual Studio為Infopath編寫(xiě)C#代碼以完成一些特定的功能。在這里要注意一下,編寫(xiě)本文時(shí)我本機(jī)的開(kāi)發(fā)環(huán)境是Visual Studio 2008 + Office 2007,在安裝Office 2007時(shí)必須手動(dòng)將Infopath項(xiàng)下的VSTA選項(xiàng)勾上,否則Infopath默認(rèn)是不支持VSTA編程接口的。Infopath中的VSTA默認(rèn)使用的Visual Studio 2005的開(kāi)發(fā)環(huán)境,讀者不需要特定去安裝Visual Studio 2005,默認(rèn)情況下VSTA會(huì)將所需的程序及環(huán)境配置好。 2010-5-30 12-57-53

  右鍵單擊要設(shè)置數(shù)據(jù)有效性驗(yàn)證的控件,選擇“編程”-“Validating事件”,此時(shí)Infopath會(huì)聯(lián)系Visual Studio打開(kāi)VSTA工程,在VSTA工程中,我們可以為事件添加自定義方法。有一個(gè)地方需要說(shuō)明,默認(rèn)情況下Infopath會(huì)以VB.NET語(yǔ)言創(chuàng)建VSTA工程,如果你想更改工程語(yǔ)言,可以點(diǎn)擊“工具”-“選項(xiàng)”,在“設(shè)計(jì)”選項(xiàng)卡中將語(yǔ)言選為C#,同時(shí)你還可以設(shè)置工程的默認(rèn)保存位置。如果之前你已經(jīng)創(chuàng)建了VB.NET語(yǔ)言的VSTA工程,可以通過(guò)“工具”-“表單選項(xiàng)”,在“編程”選項(xiàng)卡中刪除代碼,然后重新創(chuàng)建新的VSTA工程,在此處也可以選擇本Infopath表單的VSTA工程的存放位置。 2010-5-30 12-52-16

2010-5-30 13-11-02   我們?cè)赩STA中添加如下代碼,以實(shí)現(xiàn)我們?cè)谏侠邢拗浦唤邮軘?shù)字類型的數(shù)據(jù)驗(yàn)證效果。 

復(fù)制代碼 代碼如下:

public void field1_Validating(object sender, XmlValidatingEventArgs e)
{
if (!e.UndoRedo && e.Operation == XmlOperation.ValueChange)
{
// 獲取數(shù)據(jù)源中域的值
XPathNavigator root = MainDataSource.CreateNavigator();
string field1 = root.SelectSingleNode("http://my:field1", NamespaceManager).Value;

// 檢查用戶輸入項(xiàng)是否匹配正則表達(dá)式
System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(@"-?[0-9]*\.?[0-9]+");

if (!regEx.IsMatch(field1))
{
e.ReportError(e.Site, true, "僅允許數(shù)字");
}
}
}


  保存代碼并關(guān)閉Visual Studio,保存或發(fā)布編寫(xiě)好的Infopath表單,然后直接打開(kāi)表單實(shí)例,在所要驗(yàn)證的域中輸入內(nèi)容,當(dāng)驗(yàn)證失敗時(shí)Infopath會(huì)按照驗(yàn)證事件代碼中的要求彈出相應(yīng)的提示。 2010-5-30 13-57-17

在按鈕上使用規(guī)則或驗(yàn)證事件進(jìn)行數(shù)據(jù)有效性驗(yàn)證

  在Infopath中,除了上面介紹的兩種方法可以實(shí)現(xiàn)數(shù)據(jù)的有效性驗(yàn)證外,我們還可以通過(guò)給表單上的按鈕設(shè)置規(guī)則及驗(yàn)證事件來(lái)驗(yàn)證域的數(shù)據(jù)有效性。

  1. 使用規(guī)則進(jìn)行數(shù)據(jù)有效性驗(yàn)證

  例如表單中有一個(gè)文本框,一個(gè)表達(dá)式框和一個(gè)按鈕,我們想驗(yàn)證用戶在文本框中輸入的值是否為一個(gè)數(shù)字,并且將信息顯示在表達(dá)式框中。按照下面的步驟給按鈕添加規(guī)則:

右鍵單擊按鈕點(diǎn)擊“屬性”,或者直接雙擊按鈕,在彈出的對(duì)話框中點(diǎn)擊“規(guī)則”按鈕。在“規(guī)則”對(duì)話框中點(diǎn)擊“添加”。在“規(guī)則”對(duì)話框中點(diǎn)擊“添加操作”。在“操作”對(duì)話框中,從“操作”下拉列表中選擇“設(shè)置域值”。點(diǎn)擊“域”后面的按鈕,在彈出的對(duì)話框中選擇表達(dá)式框所綁定的域,點(diǎn)擊“確定”關(guān)閉對(duì)話框。保持“操作”對(duì)話框中“值”文本框?yàn)榭?,點(diǎn)擊“確定”關(guān)閉,然后關(guān)閉“規(guī)則”對(duì)話框。此時(shí)在“規(guī)則”對(duì)話框中已經(jīng)添加了一條新的規(guī)則,其作用是當(dāng)按鈕點(diǎn)擊時(shí)清空表達(dá)式框中的值。按照前面的步驟再添加一條規(guī)則,同樣綁定到表達(dá)式框上,并將值設(shè)置成“僅允許數(shù)字”。給規(guī)則2設(shè)置條件,在“條件”對(duì)話框中,選擇要進(jìn)行驗(yàn)證的域(此處應(yīng)該是文本框所對(duì)應(yīng)的域),然后選擇“不匹配模式”,同時(shí)設(shè)置匹配的正則表達(dá)式為-?[0-9]*\.?[0-9]+確定并關(guān)閉所有的對(duì)話框

  當(dāng)用戶打開(kāi)表單實(shí)例時(shí),在文本框中輸入非數(shù)字,然后點(diǎn)擊按鈕,此時(shí)表達(dá)式框中會(huì)出現(xiàn)相應(yīng)提示;如果用戶輸入的內(nèi)容符合驗(yàn)證規(guī)則,則表達(dá)式框中的內(nèi)容被清空。 

  2. 在按鈕上使用驗(yàn)證事件進(jìn)行數(shù)據(jù)有效性驗(yàn)證

  右鍵單擊按鈕點(diǎn)擊“屬性”,或者直接雙擊按鈕,在“屬性”對(duì)話框中點(diǎn)擊“編輯表單代碼”,在VSTA工程代碼中已經(jīng)新添加了一個(gè)按鈕事件,添加下面的代碼: 

復(fù)制代碼 代碼如下:

public void CTRL2_5_Clicked(object sender, ClickedEventArgs e)
{
// 獲取表單數(shù)據(jù)源根節(jié)點(diǎn)的引用
XPathNavigator root = MainDataSource.CreateNavigator();

// 清空表達(dá)式框中的內(nèi)容
root.SelectSingleNode("my:field2", NamespaceManager).SetValue("");

// 檢查文本框中的值是否為數(shù)字,并且在表達(dá)式框中顯示提示信息
string field1 = root.SelectSingleNode("my:field1", NamespaceManager).Value;
System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(@"-?[0-9]*\.?[0-9]+");

if (!regEx.IsMatch(field1))
{
root.SelectSingleNode("http://my:field2", NamespaceManager).SetValue("僅允許數(shù)字");
}
}


  注意:在Infopath中,所有的數(shù)據(jù)驗(yàn)證僅會(huì)給出相應(yīng)的提示信息,用戶可以強(qiáng)制保存表單并忽略數(shù)據(jù)有效性驗(yàn)證的提示信息。另外,本文C#代碼中所使用的主數(shù)據(jù)源節(jié)點(diǎn)名稱(如my:field1,my:field2等)因?qū)嶋H情況而異。

相關(guān)文章

  • 在IDEA(2020.2)中配置Git及使用Git的圖文詳解

    在IDEA(2020.2)中配置Git及使用Git的圖文詳解

    這篇文章主要介紹了在IDEA(2020.2)中配置Git及使用Git的圖文詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 如何通過(guò)阿里云實(shí)現(xiàn)動(dòng)態(tài)域名解析DDNS的方法

    如何通過(guò)阿里云實(shí)現(xiàn)動(dòng)態(tài)域名解析DDNS的方法

    這篇文章主要介紹了如何通過(guò)阿里云實(shí)現(xiàn)動(dòng)態(tài)域名解析DDNS的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • git克隆遠(yuǎn)程倉(cāng)庫(kù)的指定分支方法(附常用git配置命令)

    git克隆遠(yuǎn)程倉(cāng)庫(kù)的指定分支方法(附常用git配置命令)

    這篇文章主要介紹了git克隆遠(yuǎn)程倉(cāng)庫(kù)的指定分支方法(附常用git配置命令),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • git分支或指定文件回退到指定版本命令詳解

    git分支或指定文件回退到指定版本命令詳解

    作為一名后端開(kāi)發(fā),相信大家一定遇到過(guò)這樣的情景,代碼開(kāi)發(fā)人員過(guò)多,并且開(kāi)發(fā)分支過(guò)多,導(dǎo)致代碼版本管理困難,這樣就難免遇到一些代碼合并出錯(cuò),下面這篇文章主要給大家介紹了關(guān)于git分支或指定文件回退到指定版本命令的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • 搭建一個(gè)開(kāi)源項(xiàng)目?jī)煞N方式安裝git的詳細(xì)教程

    搭建一個(gè)開(kāi)源項(xiàng)目?jī)煞N方式安裝git的詳細(xì)教程

    這篇文章主要介紹了搭建一個(gè)開(kāi)源項(xiàng)目?jī)煞N方式安裝git,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 使用IDEA回滾某次提交的代碼步驟

    使用IDEA回滾某次提交的代碼步驟

    這篇文章主要介紹了使用IDEA回滾某次提交的代碼步驟,在平時(shí)的開(kāi)發(fā)中,不小心commit了錯(cuò)誤的代碼怎么辦,就需要用到回滾了,需要的朋友可以參考下
    2023-03-03
  • 自己的vscode-settings.json配置詳解

    自己的vscode-settings.json配置詳解

    這篇文章主要介紹了自己的vscode-settings.json配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • git rebase -i合并多次提交的實(shí)現(xiàn)

    git rebase -i合并多次提交的實(shí)現(xiàn)

    這篇文章主要介紹了git rebase -i合并多次提交的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 解決VS2017不能打開(kāi)stdio.h等文件的問(wèn)題

    解決VS2017不能打開(kāi)stdio.h等文件的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決VS2017不能打開(kāi)stdio.h等文件的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • VSCode中ESLint插件修復(fù)以及配置教程

    VSCode中ESLint插件修復(fù)以及配置教程

    最近為vsocde配置Eslint出現(xiàn)了許多問(wèn)題,我解決問(wèn)題之后,覺(jué)得還是把這些坑都寫(xiě)清楚,方便學(xué)習(xí)前端的初學(xué)者,下面這篇文章主要給大家介紹了關(guān)于VSCode中ESLint插件修復(fù)以及配置教程的相關(guān)資料,需要的朋友可以參考下
    2022-12-12

最新評(píng)論