一種表單系統數據源數據綁定方法
2023-06-12 16:01:31 1
〉name復原過程為建立全局綁定關係矩陣對象matrix,對控制項textl進行模型化,發現綁定標記Bind,把綁定關係BindRelation標記轉換為綁定關係對象二元組(Value,name)填入datasetl禾Btextl對應處。數據綁定關係,在表單設計中是可變。綁定關係建立後,可能被取消或者建立新的關係。需要對全局綁定關係矩陣進行維護。全局矩陣的動態維護如圖2,具體描述如下-全局綁定關係矩陣有全局標誌行標r和列標c,每行和每列的頭部又另有index標誌。全局標誌表示當前可用的行和列的數量;index標誌表示本行或者列的綁定關係數。對全局綁定關係矩陣的操作維護如下(1)註冊綁定關係。如果分配了行或者列,則全局行標或者列標減1;填入綁定關係不是替換掉原有的綁定關係,對應的行或者列index增加1;檢測全局行標或者列標,如果有等於o,則壓縮全局矩陣,全局矩陣分配固定行數和列數的空餘,設置全局行標和列標數。(2)註銷綁定關係。如果是整行或者整列註銷,則設置行或者列的index為0;如果是註銷某個綁定關係,對應行或者列index減少1。(3)壓縮全局矩陣。檢測行標和列標,如有為0的,則把本行或者本列刪除。這裡全局標誌顯示剩餘的行或者列,可以作為壓縮矩陣的標誌;行標或列標index,表示本行或者列是否有效,這樣在全局矩陣壓縮前,可以不用對矩陣大小進行變化。例如,以上過程可在Java語言中通過如下代碼來實現//新建綁定關係存儲矩陣Matrixmatrix=newMatrix;〃傳入的是Text的xml節點,根據節點獲取ID屬性值StringcontrolName=TextXml.attributeValue("ID");〃獲取Text中綁定的數據集的名稱StringbindName=TextXml.element("Bind").attributeValue("ID");//新建綁定關係BindRelationbindRelation=newBindRelation;〃把xml形式的綁定關係轉換為綁定關係對象bindRelation.convertToRelation(TextXml.element("BindRelation"));〃把綁定關係存入控制項名稱和數據集對應處matrix.put(bindName,controlName,bindRelation);其中,Matrix類為如下代碼packagedataBind;importjava.util.Has固ap;importjava.util.Stack;publicclassMatrix{〃存儲綁定關係對象,用二維數組表示矩陣BindRelation[][]store;〃記錄每行的indexint[]rowlndex;〃記錄每列的indexint[]columnlndex;〃總的行數introwj〃總的列數intcolumn;〃存儲具體的未使用的行或者列的標號StackrowUnUsed=newStack;StackcolumnUnUsed=newStack<Integer〉;//存儲標誌名和行或者列的對應關係,標誌名是欄位名稱或者控制項名稱HashMap<String,Integer〉idMap=newHashMap<String,Integer〉;〃初始化存儲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));〃初始化存儲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//存儲綁定關係,存儲成功返回trae,沒有空間存儲返回falsebooleanput(StringDataSetId,StringTextld,BindRelationrelation){booleanisNull=true;//己經有欄位和控制項的,覆蓋以前的綁定關係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;//第一次建立的綁定,需要分配新的位置存儲綁定關係對象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;〃如果是新增的存儲,行和列的index分別加1if(isNull){rowIndex[idMap.get(DataSetId)]++;columnIndex[idMap.get(TextId)]++;returntrue;〃撤銷綁定關係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;〃壓縮,如果有行標或者列表為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));}權利要求1.一種應用於表單設計的將數據集數據綁定於控制項的方法,包括如下步驟(1)構建綁定關係對象,該綁定關係對象包括數據與控制項的綁定類型以及該綁定類型對應的綁定元素信息;(2)建立數據集,同時建立全局綁定關係矩陣,全局綁定關係矩陣為一個二維數組,用於儲存全部綁定關係,將具有綁定關係的數據集欄位元素的表示符號依次轉化為連續的整數作為矩陣的列號或行號,將具有綁定關係的控制項的標識依次轉化為連續的整數作為矩陣的行號或列號,然後將綁定關係對象依次設置為行列對應處數組元素的值;(3)數據集欄位元素與控制項的綁定關係變化通過改變全局綁定關係矩陣來實現綁定關係的取消可通過註銷全局關係表中相應行或列的值來實現,新的綁定關係的建立可通過新建行或列並填入相應綁定關係對象來實現,綁定關係的變更通過將新的綁定關係對象覆蓋原有綁定關係對象來實現;(4)綁定的實施通過讀取全局綁定關係矩陣中相應綁定關係對象的綁定信息來實現。2.根據權利要求1所述的將數據集數據綁定於控制項的方法,其特徵在於,所述欄位元素和控制項的表示符號為字符串或數值。3.根據權利要求2所述的將數據集數據綁定於控制項的方法,其特徵在於,該方法還包括將全局綁定關係矩陣的綁定關係對象存儲於xml文件的步驟。4.根據權利要求1至3中任一權利要求所述的將數據集數據綁定於控制項的方法,其特徵在於,所述數據與控制項的綁定類型是指單值綁定,所述綁定元素信息為綁定關系所對應的數據欄位表示符號。5.根據權利要求4所述的將數據集數據綁定於控制項的方法,其特徵在於,所述單值綁定用字符串或數值表示,所述數據欄位表示符號為字符串或數值。6.根據權利要求1至3中任一權利要求所述的將數據集數據綁定於控制項的方法,其特徵在於,所述數據與控制項的綁定類型是指將數據欄位與控制項屬性進行二元對應的綁定,所述綁定元素信息為所有相互對應的數據欄位與控制項的表示符號。7.根據權利要求6所述的將數據集數據綁定於控制項的方法,其特徵在於,所述將數據欄位與控制項屬性進行二元對應的綁定用字符串或數值表示,所述數據欄位與控制項的表示符號為字符串或數值。8.根據權利要求1至3中任一權利要求所述的的將數據集數據綁定於控制項的方法,其特徵在於,所述數據與控制項的綁定類型是指將數據欄位與控制項屬性進行匹配的綁定,所述綁定元素信息為數據欄位與控制項屬性的匹配規則。9.根據權利要求8所述的將數據集數據綁定於控制項的方法,其特徵在於,將數據欄位與控制項屬性進行匹配的綁定用字符串或數值表示,所述數據欄位與控制項屬性的匹配規則用字符串或數值表示。10.根據權利要求9所述的將數據集數據綁定於控制項的方法,其特徵在於,所述數據欄位與控制項屬性的匹配規則為字符相同匹配和忽略大小寫的字符相同匹配。全文摘要本發明提供一種表單系統數據源數據綁定方法,具體是一種用於表單設計中將數據集中數據綁定於控制項的方法,以解決複雜表單設計中綁定關係建立操作量大和數據集變動引起的搜索時間長的問題。該方法利用包含綁定關係類型和綁定關係值的綁定關係對象表示綁定關係,通過設置全局綁定關係矩陣管理綁定關係,方便了綁定實施的操作,提高了表單程序運行效率。文檔編號G06F17/30GK101566948SQ20091009924公開日2009年10月28日申請日期2009年5月26日優先權日2009年5月26日發明者健吳,吳朝暉,尹建偉,瑩李,楊顯發,鄧水光申請人:浙江大學