欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種表單系統(tǒng)數(shù)據(jù)源數(shù)據(jù)綁定方法

文檔序號(hào):6575827閱讀:266來源:國(guó)知局

專利名稱::一種表單系統(tǒng)數(shù)據(jù)源數(shù)據(jù)綁定方法
技術(shù)領(lǐng)域
:本發(fā)明屬于數(shù)據(jù)綁定領(lǐng)域,特別是涉及數(shù)據(jù)集與控件的關(guān)聯(lián),包括數(shù)據(jù)集字段元素與控件的綁定方法以及綁定關(guān)系的維護(hù)、存儲(chǔ)和還原。
背景技術(shù)
:數(shù)據(jù)綁定,是建立數(shù)據(jù)對(duì)象和控件之間的映射機(jī)制。數(shù)據(jù)綁定,傳統(tǒng)上分為靜態(tài)和動(dòng)態(tài)綁定,也分為簡(jiǎn)單綁定和復(fù)雜綁定。靜態(tài)綁定中綁定模型是固定的,數(shù)據(jù)綁定建立后就不再改變。動(dòng)態(tài)綁定,模型和視圖之間都可能隨時(shí)有信息的改變,綁定需要?jiǎng)討B(tài)的維護(hù)。簡(jiǎn)單綁定是指單值映射,一個(gè)控件綁定到一個(gè)數(shù)據(jù)字段元素。復(fù)雜綁定是一對(duì)多、多對(duì)一及多對(duì)多的映射,一個(gè)控件可以關(guān)聯(lián)多個(gè)數(shù)據(jù)集字段元素,一個(gè)數(shù)據(jù)集字段元素關(guān)聯(lián)多個(gè)控件,以及多個(gè)控件和多個(gè)字段元素的關(guān)聯(lián)。當(dāng)前,數(shù)據(jù)綁定技術(shù)包含兩個(gè)方面一是綁定關(guān)系的建立。模型和控件的綁定,有手動(dòng)綁定方法,通過函數(shù)把模型的屬性綁定到控件的屬性,及控件屬性設(shè)置到模型屬性;也有命名規(guī)則法,規(guī)定名稱映射規(guī)則,比如反射方法和設(shè)置配置文件等。二是通知機(jī)制的建立。模型更改后,通知控件屬性的改變;控件屬性改變,通知模型改變。在模型中采用事件注冊(cè)機(jī)制,屬性改變后,發(fā)布通知給注冊(cè)事件,由注冊(cè)事件觸發(fā)視圖的改變;視圖改變通過觸發(fā)的事件,設(shè)置值到模型中。本發(fā)明涉及的問題是表單系統(tǒng)中數(shù)據(jù)集與控件的綁定。數(shù)據(jù)集是一種數(shù)據(jù)結(jié)構(gòu),是對(duì)數(shù)據(jù)源結(jié)構(gòu)化操作(査詢、更新和修改等操作)后所生成的對(duì)象的描述,包含結(jié)構(gòu)化操作語(yǔ)句及解析操作后生成的結(jié)果字段和變量字段子對(duì)象。當(dāng)數(shù)據(jù)集和控件綁定后,通過瀏覽表單可以獲取綁定的數(shù)據(jù)集字段的數(shù)據(jù)源數(shù)據(jù),使數(shù)據(jù)源數(shù)據(jù)通過控件展示出來。比如數(shù)據(jù)庫(kù)sql語(yǔ)句selectname,addressfrominformation通過數(shù)據(jù)集對(duì)象化后包含語(yǔ)句、name和address屬性及其類型信息。把name字段和控件text名稱屬性綁定,用戶就可以通過瀏覽表單獲取數(shù)據(jù)庫(kù)數(shù)據(jù)源中information表name字段值。數(shù)據(jù)集可以看成是虛擬的數(shù)據(jù)集合,數(shù)據(jù)集與控件的綁定,不涉及到物理數(shù)據(jù)操作,綁定信息指明控件獲取要設(shè)置或者展示的數(shù)據(jù)的位置。復(fù)雜的表單設(shè)計(jì),數(shù)據(jù)集字段元素和控件的綁定操作非常的頻繁。目前數(shù)據(jù)集字段元素和控件的綁定方法是將數(shù)據(jù)集字段元素和控件屬性分別進(jìn)行綁定,其綁定關(guān)系單一,每個(gè)數(shù)據(jù)集字段元素和控件模型元素都要建立綁定關(guān)系,且綁定關(guān)系儲(chǔ)存于控件模型中。例如將一個(gè)數(shù)據(jù)集字段元素與控件進(jìn)行綁定后所生成的綁定關(guān)系對(duì)象,便儲(chǔ)存于控件模型中。這種方法的主要缺陷為(1)綁定關(guān)系不靈活。每個(gè)控件模型元素和每個(gè)數(shù)據(jù)集字段元素都要建立綁定關(guān)系。比如一個(gè)復(fù)合控件Table模型,里面的每列都必須要和數(shù)據(jù)集元素建立綁定關(guān)系。這樣設(shè)計(jì)表單的操作次數(shù)的量就很大。如果一個(gè)Table有10列,就得進(jìn)行IO次綁定操作。(2)綁定關(guān)系建立后,儲(chǔ)存于控件模型中,綁定關(guān)系與數(shù)據(jù)集丟失了直接的關(guān)聯(lián)信息。當(dāng)數(shù)據(jù)集字段元素變化時(shí),需要取消與變化元素相關(guān)的綁定關(guān)系。由于綁定關(guān)系存在于控件模型中,取消綁定關(guān)系就得對(duì)整個(gè)表單的控件進(jìn)行搜索,査看每個(gè)控件是否有與變化元素相關(guān)的綁定關(guān)系,如果是復(fù)合控件還得對(duì)復(fù)合控件子控件的綁定關(guān)系進(jìn)行搜索,如果有就取消。要?jiǎng)h除數(shù)據(jù)集時(shí),也要取消所有與這數(shù)據(jù)集關(guān)聯(lián)的綁定關(guān)系。如果表單復(fù)雜,包含的控件數(shù)目很多,每次數(shù)據(jù)集的變化都要對(duì)控件進(jìn)行窮舉搜索,消耗大量時(shí)間。比如一個(gè)表單包含100個(gè)控件,數(shù)據(jù)集變化元素有5個(gè),一次變化就要進(jìn)行500次搜索。在表單設(shè)計(jì)中,數(shù)據(jù)集字段元素和控件之間綁定關(guān)系的變化是頻繁的,這樣就會(huì)消耗大量的搜索時(shí)間。特別對(duì)于處理海量數(shù)據(jù)的服務(wù)器,其程序執(zhí)行效率慢的問題就會(huì)凸顯,不能滿足目前快速有效處理大量數(shù)據(jù)的需要。針對(duì)目前復(fù)雜表單系統(tǒng)設(shè)計(jì)中存在的問題,本發(fā)明提出了一種新的數(shù)據(jù)綁定辦法,通過這種方法實(shí)現(xiàn)了數(shù)據(jù)源和控件的動(dòng)態(tài)綁定,有效的解決了復(fù)雜表單設(shè)計(jì)中綁定關(guān)系建立的操作量大和數(shù)據(jù)集變動(dòng)引起的搜索時(shí)間長(zhǎng)的問題。
發(fā)明內(nèi)容本發(fā)明通過如下方法實(shí)現(xiàn)數(shù)據(jù)源和控件的動(dòng)態(tài)綁定,以解決復(fù)雜表單設(shè)計(jì)中綁定關(guān)系建立操作量大和數(shù)據(jù)集變動(dòng)引起的搜索時(shí)間長(zhǎng)的問題。數(shù)據(jù)源數(shù)據(jù)用操作語(yǔ)句(比如SQL等)描述,對(duì)操作語(yǔ)句進(jìn)行解析,轉(zhuǎn)換為數(shù)據(jù)集。數(shù)據(jù)集包含數(shù)據(jù)源的字段名稱和字段類型。控件是表單的顯示元素,控件都有對(duì)應(yīng)的模型,復(fù)合控件包含其他子控件。1.綁定關(guān)系的設(shè)置綁定關(guān)系是數(shù)據(jù)集字段元素與控件的關(guān)聯(lián)關(guān)系。綁定關(guān)系具體用綁定關(guān)系對(duì)象進(jìn)行描述,綁定關(guān)系對(duì)象為一個(gè)二元組,包括綁定關(guān)系類型和綁定關(guān)系值,即表示為(綁定關(guān)系類型,綁定關(guān)系值)。本發(fā)明中綁定關(guān)系可有三種類型值、二元關(guān)系表和匹配模式。三種類型可用字符串、數(shù)值或其它符號(hào)進(jìn)行表示。如果綁定關(guān)系類型為值,即單值綁定,此數(shù)據(jù)集字段元素即為綁定關(guān)系值;如果綁定類型為二元關(guān)系表,其中,所述二元關(guān)系表用于設(shè)置數(shù)據(jù)集中字段與控件的對(duì)應(yīng)關(guān)系,例如,數(shù)據(jù)集與表的綁定,可以設(shè)置數(shù)據(jù)集中字段名稱和表頭字段名稱的對(duì)應(yīng)關(guān)系,將所有對(duì)應(yīng)關(guān)系建立為關(guān)系表,綁定關(guān)系值即為此關(guān)系表對(duì)象;如果綁定類型是匹配模式,其中,匹配模式是定義規(guī)則,作為綁定元素和控件屬性的關(guān)聯(lián)準(zhǔn)則,應(yīng)用匹配模式,可以自動(dòng)建立數(shù)據(jù)集字段元素和控件的綁定,比如設(shè)置名稱相同的匹配規(guī)則,數(shù)據(jù)集字段名稱和復(fù)合控件子控件名稱相同的就會(huì)自動(dòng)綁定,綁定關(guān)系值即匹配規(guī)則,如字符相同匹配和忽略大小寫的字符相同匹配等規(guī)則。本發(fā)明對(duì)綁定分為簡(jiǎn)單綁定和復(fù)雜綁定。簡(jiǎn)單綁定是單一映射,如控件和數(shù)據(jù)集字段元素的綁定,可通過關(guān)聯(lián)控件和數(shù)據(jù)集子元素來實(shí)現(xiàn),即上述單值綁定情況。對(duì)于復(fù)雜的綁定,如控件是復(fù)合控件,控件多個(gè)子元素要和數(shù)據(jù)集字段元素綁定,可以通過設(shè)置綁定關(guān)系,生成上述綁定關(guān)系類型為二元關(guān)系表或匹配模式的綁定關(guān)系對(duì)象。2.全局綁定關(guān)系矩陣的建立在本發(fā)明中采用全局綁定關(guān)系矩陣儲(chǔ)存綁定關(guān)系,全局綁定關(guān)系矩陣為一個(gè)二維數(shù)組。將具有綁定關(guān)系的數(shù)據(jù)集字段元素依次轉(zhuǎn)化為連續(xù)的整數(shù)(字段ID)作為矩陣的列號(hào),將具有綁定關(guān)系的控件依次轉(zhuǎn)化為連續(xù)的整數(shù)(控件ID)作為矩陣的行號(hào),然后將綁定關(guān)系對(duì)象設(shè)置為行列對(duì)應(yīng)處數(shù)組元素的值。其中,所述的數(shù)據(jù)集字段元素和控件的標(biāo)識(shí)可用字符串、數(shù)值或其它符號(hào)進(jìn)行表示。在建立過程中,找到字段ID所在的行,如果不存在則在全局綁定關(guān)系矩陣中新建行;再找到控件ID所在的列,如果不存在則在全局綁定關(guān)系矩陣中新建列;把綁定關(guān)系對(duì)象設(shè)置行列對(duì)應(yīng)處數(shù)組元素的值。同樣,也可以將字段ID作為矩陣的行號(hào),將控件ID作為矩陣的列號(hào),然后將綁定關(guān)系對(duì)象設(shè)置為行列對(duì)應(yīng)處數(shù)組元素的值。當(dāng)表單從xml文件反序列化為模型的時(shí)候,要復(fù)原全局綁定關(guān)系矩陣。復(fù)原過程為如控件xml標(biāo)記模型化中,發(fā)現(xiàn)綁定標(biāo)記,把綁定標(biāo)記反序列化為綁定關(guān)系對(duì)象,綁定關(guān)系xml標(biāo)記到綁定關(guān)系對(duì)象的轉(zhuǎn)化,只需要把綁定關(guān)系類型和綁定關(guān)系值填入綁定關(guān)系對(duì)象即可,然后依上述方法將綁定關(guān)系對(duì)象填入全局綁定關(guān)系矩陣中。3.全局綁定關(guān)系矩陣的維護(hù)全局綁定關(guān)系矩陣建立以后,數(shù)據(jù)集字段元素與控件的綁定關(guān)系變化便可以通過改變?nèi)纸壎P(guān)系矩陣來實(shí)現(xiàn)。當(dāng)一個(gè)新的數(shù)據(jù)集字段元素要和控件建立綁定關(guān)系,只需要注冊(cè)新的列或行,再將綁定關(guān)系對(duì)象填入全局綁定關(guān)系矩陣即可。當(dāng)一個(gè)數(shù)據(jù)集字段元素和多個(gè)控件屬性建立綁定關(guān)系,數(shù)據(jù)集刪除掉綁定字段元素后,綁定的取消只需注銷全局綁定關(guān)系矩陣中的字段元素列或行的值。當(dāng)建立綁定關(guān)系的控件,要綁定到其他數(shù)據(jù)集字段元素,只需取消原有的綁定關(guān)系,用新的綁定關(guān)系對(duì)象填到新的字段元素與控件的對(duì)應(yīng)位置。對(duì)于控件的變化也是同樣的,比如刪除掉某個(gè)控件,則與其相關(guān)的綁定關(guān)系都會(huì)失去作用。比如,修改數(shù)據(jù)集DataSetl中的數(shù)據(jù)源數(shù)據(jù)庫(kù)sql語(yǔ)句為selectaddressfrominformation,數(shù)據(jù)集中只有address為可綁定元素。原有的綁定元素name與控件的綁定的取消,只需要在全局綁定關(guān)系矩陣中搜索與數(shù)據(jù)集有綁定關(guān)系的控件,找到綁定關(guān)系后取消掉也存在的name到控件的綁定關(guān)系,而不用從所有控件中進(jìn)行査找。4.表單及綁定關(guān)系的存儲(chǔ)數(shù)據(jù)綁定操作完成后,表單要從內(nèi)存存儲(chǔ)到物理介質(zhì)上。存儲(chǔ)過程為如表單序列化元素為控件,且控件在全局綁定關(guān)系表中存在綁定關(guān)系,則取出綁定關(guān)系對(duì)象,序列化后存儲(chǔ)于相應(yīng)控件。采用全局綁定關(guān)系矩陣儲(chǔ)存綁定關(guān)系使得綁定實(shí)施的操作十分方便,只需要從全局綁定關(guān)系矩陣讀取相應(yīng)的綁定關(guān)系對(duì)象便可實(shí)施相應(yīng)的綁定,可編寫一個(gè)函數(shù)或類對(duì)象對(duì)全局綁定關(guān)系實(shí)施統(tǒng)一綁定,不需要就具體的綁定分別編寫綁定代碼,極大地減小了編程操作量,并且能更有效保證綁定關(guān)系的準(zhǔn)確操作。而且,該方法的另一個(gè)有益效果是顯著地提高程序運(yùn)行效率。復(fù)雜的表單設(shè)計(jì),數(shù)據(jù)集和控件的綁定操作非常的頻繁,全局綁定關(guān)系矩陣的維護(hù)就變得非常重要。當(dāng)綁定關(guān)系發(fā)生變化時(shí),通過該方法設(shè)計(jì)的表單系統(tǒng)不再需要重新搜索控件的綁定信息,只需要更新全局綁定關(guān)系矩陣即可,解決了復(fù)雜表單中綁定關(guān)系變動(dòng)引起的搜索時(shí)間長(zhǎng)的問題。圖1數(shù)據(jù)集與控件綁定模型圖2全局綁定關(guān)系矩陣維護(hù)模型圖3綁定關(guān)系存儲(chǔ)模型圖4綁定關(guān)系還原模型具體實(shí)施例方式下面結(jié)合附圖舉例說明本發(fā)明的具體實(shí)施方式。1.綁定關(guān)系在xml文件中的存儲(chǔ)在本具體實(shí)施方式中,將本發(fā)明中三種綁定關(guān)系——值、二元關(guān)系表和匹配模式分別用字符串Value、Table和Match表示。在Match類型中用字符串Equal和EqualIgnoreCase分別表示字符相同匹配和忽略大小寫的字符相同匹配。在本具體實(shí)施方式中,用xml文件存儲(chǔ)綁定關(guān)系,綁定關(guān)系存儲(chǔ)說明如圖3。對(duì)于簡(jiǎn)單綁定,例如要將Text類型的控件textl和數(shù)據(jù)集datasetl中字段元素name進(jìn)行綁定,綁定關(guān)系對(duì)象為(Value,name),存儲(chǔ)到控件時(shí)xml文件為<TextID="textl",Content=""><BindID="datasetl"/><BindRelationType=,,Value,,,Relationname=,,inforValue,,〉name</BindRelation></Text>對(duì)于復(fù)雜綁定,如果綁定關(guān)系是二元關(guān)系表,此時(shí)綁定關(guān)系類型為Table,綁定關(guān)系對(duì)象為(Table,映射表對(duì)象)。映射表對(duì)象用Map數(shù)據(jù)結(jié)構(gòu)表示,存儲(chǔ)映射對(duì)。比如將數(shù)據(jù)集datasetl中兩個(gè)字段元素(name,address)和表格中(名稱,地址)綁定,存儲(chǔ)到控件時(shí)xml文件為<TableID="tablel"><TRname^'名稱"/〉<TRname^,地址"/〉<BindID="datasetl,7><BindRelationType=,,Table",Relationname=,,inforTable"〉<maping〉<IDl>name</IDl>〈ID2〉名稱々ID2〉</maping><maping><ID1>address</ID1><ID2〉地址々ID2></maping〉</BindRelation></Table>如果綁定關(guān)系是匹配模式,此時(shí)綁定關(guān)系類型為Match,綁定關(guān)系對(duì)象為(Match,具體匹配規(guī)則)。如果具體匹配規(guī)則具體是忽略大小寫的字符相同匹配,則綁定關(guān)系對(duì)象為(Match,EqualIgnoreCase)。比如數(shù)據(jù)集datasetl中字段元素(name,address)和表格中(Name,Address)綁定,存儲(chǔ)到控件時(shí)xml文件為<TableID="tablel"><TRname=,,Name,7〉<TRname=,,Add應(yīng),V〉<BindID="datasetl,,/〉<BindRelationType="Match",Relationname="inforMatch">EquallgnoreCase</BindRdation></Table>2.綁定關(guān)系從xml文件反序列化為綁定關(guān)系對(duì)象模型當(dāng)綁定關(guān)系類型為值,即單值綁定時(shí),綁定關(guān)系值即相應(yīng)字段元素,在本實(shí)施例中用字符串表示;當(dāng)綁定關(guān)系類型為匹配模式時(shí),綁定關(guān)系值為具體匹配規(guī)則,即上述的字符相同匹配、忽略大小寫的字符相同匹配或其他規(guī)則,在本實(shí)施例中用字符串表示;當(dāng)綁定關(guān)系類型為二元關(guān)系表時(shí),綁定關(guān)系值為關(guān)系表對(duì)象,在本實(shí)施例中用字符串表示。然后從xml文件中獲取綁定綁定信息轉(zhuǎn)化為綁定關(guān)系對(duì)象。例如,可在Java語(yǔ)言中通過建立如下綁定關(guān)系對(duì)象模型來實(shí)現(xiàn)-packagedataBind;importjava.util.HashMap;publicclassBindRelation{//綁定類型publicenumtype{Value,Table,Match};〃綁定名稱Stringname;//綁定類型typerelationType;〃如果是Value或者M(jìn)atch類型的,存儲(chǔ)值Stringvalue;//如果是Table類型的,存儲(chǔ)綁定對(duì)HashMap<String,String〉tableValue;〃把xml元素bindRelation轉(zhuǎn)換為BindRelation對(duì)象BindRelationconvertToRelation(org.dom4j.ElementbindRelation){name=bindRelation.attributeValue("Relationname");〃value類型的轉(zhuǎn)換if(bindRelation.attribute("Type").equals(type.Value)){relationType=type.Value;value=bindRelation.getTextO;〃表類型的轉(zhuǎn)換elseif(bindRelation.attribute("Type").equals(type.Table)){relationType=type.Table;for(Objectobject:bindRelation.elements()){org.dom4j.Elementelement=(org.dom4j.Element)object;StringID1=element.elementText("ID1");StringID2=element.elementText("ID2");tableValue.put(IDl,ID2);〃匹配類型的轉(zhuǎn)換elseif(bindRelation.attribute("Type").equals(type.Match)){relationType=type.Match;value=bindRelation.getText();returnthis;3.全局綁定關(guān)系矩陣的建立及維護(hù)當(dāng)表單從xml文件反序列化為模型的時(shí)候,要復(fù)原和建立全局綁定關(guān)系矩陣。如圖1圖4所示,字段ID和控件ID分別作為矩陣的列號(hào)和行號(hào),綁定關(guān)系對(duì)象作為行列交叉處數(shù)組元素的值。建立好綁定關(guān)系后,把字段ID、控件ID和綁定關(guān)系對(duì)象注冊(cè)到全局矩陣。找到字段ID所在的行,如果不存在則在全局矩陣中新建行;再找到控件ID所在的列,如果不存在則在全局矩陣中新建列;把綁定關(guān)系ID填入行列對(duì)應(yīng)處。復(fù)原過程為首先建立綁定關(guān)系全局矩陣對(duì)象。對(duì)控件xml標(biāo)記進(jìn)行模型化,發(fā)現(xiàn)綁定標(biāo)記,把綁定關(guān)系標(biāo)記對(duì)象化為綁定關(guān)系對(duì)象,填入全局矩陣中控件標(biāo)記ID和綁定標(biāo)記ID對(duì)應(yīng)處??丶蘒D和綁定ID都可由控件xml標(biāo)記獲取,綁定關(guān)系xml標(biāo)記到綁定關(guān)系對(duì)象的轉(zhuǎn)化,只需要把綁定類型填入對(duì)象的類型屬性,綁定名稱填入對(duì)象的名稱屬性,值或者匹配字符串填入對(duì)象的值屬性,映射對(duì)填入map對(duì)象。如下表單XML文件,<DataSetname="datasetl"〉<GolumnName>name</GolumnNam6〉<ColumnName>address</ColumnName></DataSet〉<TextID="textl",Content=""><BindID="datasetl,7><BindRelationType="Value",Relationname="text1Bind"〉name</BindRelation></Text>復(fù)原過程為建立全局綁定關(guān)系矩陣對(duì)象matrix,對(duì)控件textl進(jìn)行模型化,發(fā)現(xiàn)綁定標(biāo)記Bind,把綁定關(guān)系BindRelation標(biāo)記轉(zhuǎn)換為綁定關(guān)系對(duì)象二元組(Value,name)填入datasetl禾Btextl對(duì)應(yīng)處。數(shù)據(jù)綁定關(guān)系,在表單設(shè)計(jì)中是可變。綁定關(guān)系建立后,可能被取消或者建立新的關(guān)系。需要對(duì)全局綁定關(guān)系矩陣進(jìn)行維護(hù)。全局矩陣的動(dòng)態(tài)維護(hù)如圖2,具體描述如下-全局綁定關(guān)系矩陣有全局標(biāo)志行標(biāo)r和列標(biāo)c,每行和每列的頭部又另有index標(biāo)志。全局標(biāo)志表示當(dāng)前可用的行和列的數(shù)量;index標(biāo)志表示本行或者列的綁定關(guān)系數(shù)。對(duì)全局綁定關(guān)系矩陣的操作維護(hù)如下(1)注冊(cè)綁定關(guān)系。如果分配了行或者列,則全局行標(biāo)或者列標(biāo)減1;填入綁定關(guān)系不是替換掉原有的綁定關(guān)系,對(duì)應(yīng)的行或者列index增加1;檢測(cè)全局行標(biāo)或者列標(biāo),如果有等于o,則壓縮全局矩陣,全局矩陣分配固定行數(shù)和列數(shù)的空余,設(shè)置全局行標(biāo)和列標(biāo)數(shù)。(2)注銷綁定關(guān)系。如果是整行或者整列注銷,則設(shè)置行或者列的index為0;如果是注銷某個(gè)綁定關(guān)系,對(duì)應(yīng)行或者列index減少1。(3)壓縮全局矩陣。檢測(cè)行標(biāo)和列標(biāo),如有為0的,則把本行或者本列刪除。這里全局標(biāo)志顯示剩余的行或者列,可以作為壓縮矩陣的標(biāo)志;行標(biāo)或列標(biāo)index,表示本行或者列是否有效,這樣在全局矩陣壓縮前,可以不用對(duì)矩陣大小進(jìn)行變化。例如,以上過程可在Java語(yǔ)言中通過如下代碼來實(shí)現(xiàn)//新建綁定關(guān)系存儲(chǔ)矩陣Matrixmatrix=newMatrix();〃傳入的是Text的xml節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)獲取ID屬性值StringcontrolName=TextXml.attributeValue("ID");〃獲取Text中綁定的數(shù)據(jù)集的名稱StringbindName=TextXml.element("Bind").attributeValue("ID");//新建綁定關(guān)系BindRelationbindRelation=newBindRelation();〃把xml形式的綁定關(guān)系轉(zhuǎn)換為綁定關(guān)系對(duì)象bindRelation.convertToRelation(TextXml.element("BindRelation"));〃把綁定關(guān)系存入控件名稱和數(shù)據(jù)集對(duì)應(yīng)處matrix.put(bindName,controlName,bindRelation);其中,Matrix類為如下代碼packagedataBind;importjava.util.Has固ap;importjava.util.Stack;publicclassMatrix{〃存儲(chǔ)綁定關(guān)系對(duì)象,用二維數(shù)組表示矩陣BindRelation[][]store;〃記錄每行的indexint[]rowlndex;〃記錄每列的indexint[]columnlndex;〃總的行數(shù)introwj〃總的列數(shù)intcolumn;〃存儲(chǔ)具體的未使用的行或者列的標(biāo)號(hào)Stack<Integer>rowUnUsed=newStack<Integer>();Stack<Integer>columnUnUsed=newStack<Integer〉();//存儲(chǔ)標(biāo)志名和行或者列的對(duì)應(yīng)關(guān)系,標(biāo)志名是字段名稱或者控件名稱HashMap<String,Integer〉idMap=newHashMap<String,Integer〉();〃初始化存儲(chǔ)publicMatrix(){〃TODOAuto-generatedconstructorstubstore=newBindRelation[10][50];row=10;column—50;rowlndex=newint[10];columnlndex=newint[50];for(inti=0;i<10;i++)rowUnUsed.push(newInteger(i));for(inti=0;i<50;i++)columnUnUsed.push(newInteger(i));〃初始化存儲(chǔ)publicMatrix(introw,intcolumn){〃TODOAuto-generatedconstructorstubstore=newBindRelation[row][column];this.row—row;this.column=column;rowlndex——newint[row];columnlndex=newint[column];for(inti=0;i<row;i++)rowUnUsed.push(newInteger(i));for(inti=0;i<column;i++)columnUnUsed.push(newInteger(i));〃分配新的行publicbooleannewRow(Integerrowld){if(rowUnUsed.isEmpty(》returnfalse;else{rowld=rowUnUsed.pop();returntrue;//分配新的列publicbooleannewColumn(Integercolumnld){if(columnUnUsed.isEmpty())returnfalse;else{columnld=columnUnUsed.pop();returntruej//存儲(chǔ)綁定關(guān)系,存儲(chǔ)成功返回trae,沒有空間存儲(chǔ)返回falsebooleanput(StringDataSetId,StringTextld,BindRelationrelation){booleanisNull=true;//己經(jīng)有字段和控件的,覆蓋以前的綁定關(guān)系if(idMap.containsKey(DataSetld)&&idMap.containsKey(TextId)){if(store[idMap.get(DataSetld)][idMap.get(Textld)]!=null)isNull=false;store[idMap.get(DataSetld)][idMap.get(Textld)]=relation;//第一次建立的綁定,需要分配新的位置存儲(chǔ)綁定關(guān)系對(duì)象elseif(!idMap.containsKey(DataSetld)&&idMap.containsKey(TextId))Integerrowid=0;if(newRow(rowid)){idMap.put(DataSetId,rowid);store[idMap.get(DataSetld)][idMap.get(Textld)]=relation;}elsereturnfalse;elseif(idMap.containsKey(DataSetld)&&!idMap.containsKey(TextId))Integercolumnid=0;if(newRow(columnid)){idMap.put(DataSetId,columnid);store[idMap.get(DataSetld)][idMap.get(Textld)]=relation;}elsereturnfalse;elseif(!idMap.containsKey(DataSetld)&&!idMap.containsKey(Textld))Integercolumnid=0;Integerrowid=0;if(newRow(rowid)&&newRow(columnid)){idMap.put(DataSetId,rowid);idMap.put(DataSetId,columnid);store[idMap.get(DataSetld)][idMap.get(Textld)]=relation;}elsereturnfalse;〃如果是新增的存儲(chǔ),行和列的index分別加1if(isNull){rowIndex[idMap.get(DataSetId)]++;columnIndex[idMap.get(TextId)]++;returntrue;〃撤銷綁定關(guān)系booleanredraw(StringDataSetId,StringTextid){if(idMap.containsKey(DataSetld)&&idMap.containsKey(TextId)){if(store[idMap.get(DataSetld)][idMap.get(Textld)]!=null){store[idMap.get(DataSetld)][idMap.get(Textld)]=null;〃撤銷后,行和列的index分別減1rowIndex[idMap.get(DataSetld)]—;columnlndex[idMap.get(Textld)]—;returntruejreturnfalse;〃壓縮,如果有行標(biāo)或者列表為0的,又不再未分配的行或者列里,則在未分配的行或者列里添加voidcompressO{for(inti=0;i<row;i++){if(rowlndex[i]—0)if(!rowUnUsed.contains(newInteger(i)))rowUnUsed.push(newInteger(i));for(inti=0;i<column;i++){if(columnlndex[i]—畫0)if(!columnUnUsed.contains(newInteger(i)))columnUnUsed.push(newInteger(i));}權(quán)利要求1.一種應(yīng)用于表單設(shè)計(jì)的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,包括如下步驟(1)構(gòu)建綁定關(guān)系對(duì)象,該綁定關(guān)系對(duì)象包括數(shù)據(jù)與控件的綁定類型以及該綁定類型對(duì)應(yīng)的綁定元素信息;(2)建立數(shù)據(jù)集,同時(shí)建立全局綁定關(guān)系矩陣,全局綁定關(guān)系矩陣為一個(gè)二維數(shù)組,用于儲(chǔ)存全部綁定關(guān)系,將具有綁定關(guān)系的數(shù)據(jù)集字段元素的表示符號(hào)依次轉(zhuǎn)化為連續(xù)的整數(shù)作為矩陣的列號(hào)或行號(hào),將具有綁定關(guān)系的控件的標(biāo)識(shí)依次轉(zhuǎn)化為連續(xù)的整數(shù)作為矩陣的行號(hào)或列號(hào),然后將綁定關(guān)系對(duì)象依次設(shè)置為行列對(duì)應(yīng)處數(shù)組元素的值;(3)數(shù)據(jù)集字段元素與控件的綁定關(guān)系變化通過改變?nèi)纸壎P(guān)系矩陣來實(shí)現(xiàn)綁定關(guān)系的取消可通過注銷全局關(guān)系表中相應(yīng)行或列的值來實(shí)現(xiàn),新的綁定關(guān)系的建立可通過新建行或列并填入相應(yīng)綁定關(guān)系對(duì)象來實(shí)現(xiàn),綁定關(guān)系的變更通過將新的綁定關(guān)系對(duì)象覆蓋原有綁定關(guān)系對(duì)象來實(shí)現(xiàn);(4)綁定的實(shí)施通過讀取全局綁定關(guān)系矩陣中相應(yīng)綁定關(guān)系對(duì)象的綁定信息來實(shí)現(xiàn)。2.根據(jù)權(quán)利要求1所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,所述字段元素和控件的表示符號(hào)為字符串或數(shù)值。3.根據(jù)權(quán)利要求2所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,該方法還包括將全局綁定關(guān)系矩陣的綁定關(guān)系對(duì)象存儲(chǔ)于xml文件的步驟。4.根據(jù)權(quán)利要求1至3中任一權(quán)利要求所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,所述數(shù)據(jù)與控件的綁定類型是指單值綁定,所述綁定元素信息為綁定關(guān)系所對(duì)應(yīng)的數(shù)據(jù)字段表示符號(hào)。5.根據(jù)權(quán)利要求4所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,所述單值綁定用字符串或數(shù)值表示,所述數(shù)據(jù)字段表示符號(hào)為字符串或數(shù)值。6.根據(jù)權(quán)利要求1至3中任一權(quán)利要求所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,所述數(shù)據(jù)與控件的綁定類型是指將數(shù)據(jù)字段與控件屬性進(jìn)行二元對(duì)應(yīng)的綁定,所述綁定元素信息為所有相互對(duì)應(yīng)的數(shù)據(jù)字段與控件的表示符號(hào)。7.根據(jù)權(quán)利要求6所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,所述將數(shù)據(jù)字段與控件屬性進(jìn)行二元對(duì)應(yīng)的綁定用字符串或數(shù)值表示,所述數(shù)據(jù)字段與控件的表示符號(hào)為字符串或數(shù)值。8.根據(jù)權(quán)利要求1至3中任一權(quán)利要求所述的的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,所述數(shù)據(jù)與控件的綁定類型是指將數(shù)據(jù)字段與控件屬性進(jìn)行匹配的綁定,所述綁定元素信息為數(shù)據(jù)字段與控件屬性的匹配規(guī)則。9.根據(jù)權(quán)利要求8所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,將數(shù)據(jù)字段與控件屬性進(jìn)行匹配的綁定用字符串或數(shù)值表示,所述數(shù)據(jù)字段與控件屬性的匹配規(guī)則用字符串或數(shù)值表示。10.根據(jù)權(quán)利要求9所述的將數(shù)據(jù)集數(shù)據(jù)綁定于控件的方法,其特征在于,所述數(shù)據(jù)字段與控件屬性的匹配規(guī)則為字符相同匹配和忽略大小寫的字符相同匹配。全文摘要本發(fā)明提供一種表單系統(tǒng)數(shù)據(jù)源數(shù)據(jù)綁定方法,具體是一種用于表單設(shè)計(jì)中將數(shù)據(jù)集中數(shù)據(jù)綁定于控件的方法,以解決復(fù)雜表單設(shè)計(jì)中綁定關(guān)系建立操作量大和數(shù)據(jù)集變動(dòng)引起的搜索時(shí)間長(zhǎng)的問題。該方法利用包含綁定關(guān)系類型和綁定關(guān)系值的綁定關(guān)系對(duì)象表示綁定關(guān)系,通過設(shè)置全局綁定關(guān)系矩陣管理綁定關(guān)系,方便了綁定實(shí)施的操作,提高了表單程序運(yùn)行效率。文檔編號(hào)G06F17/30GK101566948SQ20091009924公開日2009年10月28日申請(qǐng)日期2009年5月26日優(yōu)先權(quán)日2009年5月26日發(fā)明者健吳,吳朝暉,尹建偉,瑩李,楊顯發(fā),鄧水光申請(qǐng)人:浙江大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
大兴区| 濮阳市| 北碚区| 鹤峰县| 永顺县| 屯门区| 河源市| 封开县| 绥中县| 错那县| 铜鼓县| 隆安县| 高阳县| 郑州市| 衡阳市| 来凤县| 登封市| 义乌市| 平陆县| 七台河市| 溆浦县| 永安市| 土默特左旗| 泾川县| 交口县| 济宁市| 剑阁县| 炉霍县| 双牌县| 博客| 基隆市| 南阳市| 岫岩| 元氏县| 延津县| 漯河市| 喀喇沁旗| 宽甸| 山丹县| 萝北县| 北宁市|