吳志泉
摘要:本文詳細(xì)闡述了在B/S模式下如何實(shí)現(xiàn)數(shù)據(jù)的全屏編輯及如何通過復(fù)制-粘貼模式實(shí)現(xiàn)數(shù)據(jù)的批量錄入方法。該方法在作者以asp.net為編程語(yǔ)言,以O(shè)racle為后臺(tái)數(shù)據(jù)庫(kù)的設(shè)計(jì)的《水井分層測(cè)試系統(tǒng)》中得到具體應(yīng)用,取得了良好的效果。
關(guān)鍵詞:Asp.net;Oracle;全屏編輯;復(fù)制-粘貼
1.引言
隨著信息化的不斷深入,企業(yè)內(nèi)部依托局域網(wǎng),以B/S模式開發(fā)的應(yīng)用系統(tǒng)逐漸成為主流,但多數(shù)據(jù)應(yīng)用系統(tǒng)在進(jìn)行數(shù)據(jù)編輯時(shí)都是逐條進(jìn)行的,即編輯完一條數(shù)據(jù)后,按提交按鈕,再繼續(xù)編輯下一條。在很多時(shí)候用戶在錄入數(shù)據(jù)時(shí)都需要多條錄入一次提交,這樣不僅方便對(duì)數(shù)據(jù)進(jìn)行檢查,也能提高數(shù)據(jù)庫(kù)的編輯速度,同時(shí)用戶還提出要能通過復(fù)制-粘貼模式進(jìn)行數(shù)據(jù)的編輯。作者通過數(shù)據(jù)數(shù)據(jù)回調(diào)及隱含域等方法實(shí)現(xiàn)了數(shù)據(jù)的全屏及復(fù)制-粘貼模式實(shí)現(xiàn)了數(shù)據(jù)的批量編輯。
2.設(shè)計(jì)原理
B/S模式的開發(fā)人員都知道,通過web模式錄入數(shù)據(jù),在進(jìn)行數(shù)據(jù)提交時(shí),都要進(jìn)行網(wǎng)頁(yè)的刷新,刷新之后,動(dòng)態(tài)錄入的數(shù)據(jù)基本上都會(huì)被清除掉。雖然現(xiàn)在有了Ajax技術(shù),但其實(shí)質(zhì)仍然是通過局部刷新網(wǎng)頁(yè)來提交數(shù)據(jù)。在刷新后系統(tǒng)設(shè)計(jì)時(shí)生成的控件內(nèi)的數(shù)據(jù)通過數(shù)據(jù)回調(diào)仍然顯示在控件上,但動(dòng)態(tài)添加的控件及其里面的數(shù)據(jù)都會(huì)被清除掉。利用隱含域及數(shù)據(jù)回調(diào)技術(shù),在網(wǎng)頁(yè)進(jìn)行刷新時(shí),把動(dòng)態(tài)控件及其里面的內(nèi)容寫到隱含域中,頁(yè)面刷新后再根據(jù)隱含域的內(nèi)容在頁(yè)面上進(jìn)行控件的重畫及把原來的數(shù)據(jù)寫到重畫后的控件中,然后通過控制光標(biāo)鍵在控件內(nèi)的跳轉(zhuǎn),來實(shí)現(xiàn)類似于Excel方式的全屏編輯。通過javascript的剪貼板讀取函數(shù)把里面的數(shù)據(jù)讀出來,按格式進(jìn)行拆分,把拆分后的數(shù)據(jù)填充到頁(yè)面數(shù)據(jù)編輯框控件中。
3.設(shè)計(jì)思路
3.1全屏編輯
通過添加行按鈕,在頁(yè)面上新添加一行或多行數(shù)據(jù)編輯框,通過javascript函數(shù)↑、↓、回車鍵、Ctrl鍵控制光標(biāo)在編輯框內(nèi)跳轉(zhuǎn),↑跳轉(zhuǎn)到上一個(gè)編輯框,↓跳轉(zhuǎn)到下一個(gè)編輯框,回車鍵跳轉(zhuǎn)到后一個(gè)編輯框,Ctrl跳轉(zhuǎn)到前一個(gè)編輯框。
3.2復(fù)制-粘貼
由于復(fù)制-粘貼是在客戶端進(jìn)行的,我們可以用JavaScript的ClipboardData.getData函數(shù)來讀取剪貼板內(nèi)的數(shù)據(jù),然后把讀取的數(shù)據(jù)根據(jù)數(shù)據(jù)編輯框的個(gè)數(shù)和行數(shù),拆分成數(shù)組分別填充到數(shù)據(jù)編輯框中。
3.3數(shù)據(jù)提交
由于asp.net在進(jìn)行數(shù)據(jù)提交時(shí),只提交系統(tǒng)設(shè)計(jì)時(shí)生成的控件及其內(nèi)容,動(dòng)態(tài)添加的控件不會(huì)被提交,因此在進(jìn)行數(shù)據(jù)提交時(shí),先通過javascript把客戶端動(dòng)態(tài)生成的控件及內(nèi)容寫到設(shè)計(jì)時(shí)生成的隱含控件(隱含域)中,然后再服務(wù)器端對(duì)隱含域的內(nèi)容進(jìn)行解析,再把解析后的結(jié)果保存到數(shù)據(jù)庫(kù)中。
4.程序?qū)崿F(xiàn)方法
復(fù)制-粘貼程序片斷
function WriteDatatoTable(curTable,iSource)
{
var iSourceData;
if (iSource==0)
iSourceData = window.clipboardData.getData('text');
if (iSource==1)
iSourceData=document.getElementById("ClipboardText").value;
if (!iSourceData)
{
document.getElementById("TipLabel").innerHTML="沒有符合條件的數(shù)據(jù)";
return;
}
else
{
document.getElementById("TipLabel").innerHTML="";
}
var curArray=iSourceData.split("\n");
AddTableRow(curTable,curArray.length-1);
var TableCellCount=curTable.rows.item(0).cells.length;
var curSubArray=curArray[0].split("\t");
if (curSubArray.length>TableCellCount-1)
{
document.getElementById("TipLabel").innerHTML="數(shù)據(jù)列數(shù)大于表格列數(shù)";
return;
}
for (var i=0;i { var curSubArray=curArray[i].split("\t"); for (var j=0;j { curTable.rows[i+curTable.rows.length-curArray.length+1].cells[j+1].innerHTML=curSubArray[j]; } }} 5.結(jié)束語(yǔ) 本程序設(shè)計(jì)方法,已經(jīng)成功地應(yīng)用于由作者開發(fā)設(shè)計(jì)的《水井分層測(cè)試系統(tǒng)》中,以B/S模式實(shí)現(xiàn)了C/S的數(shù)據(jù)編輯方法。