資源描述:
《數(shù)據(jù)窗口控件大全》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、數(shù)據(jù)窗口控件-datawindowPB9.0提供了28個屬性、35個默認事件、162個函數(shù)。注意與數(shù)據(jù)窗口對象的區(qū)分?!酒渌俊瞿_本的執(zhí)行效率*盡量不要在RetrieveRow事件下編寫腳本(包括注釋)。*如果數(shù)據(jù)窗口的DoubleClicked事件中編寫了腳本,那么在數(shù)據(jù)窗口的C1icked事件中的腳本應(yīng)該盡量短,否則雙擊事件中的腳本永遠不可能得到執(zhí)行。一般來說,Cliked中腳本的執(zhí)行時間和兩次擊鼠標之間的間隔時間之和,不應(yīng)該大于操作系統(tǒng)中所設(shè)定的鼠標雙擊時間間隔,否則雙擊事件永遠不可能觸發(fā),雙擊時僅僅是接連兩次觸發(fā)c1icked事件
2、。*在數(shù)據(jù)窗口中錄入數(shù)據(jù)時,事件EditChanged是觸發(fā)頻率最高的,每一個按鈕都觸發(fā)該事件;觸發(fā)頻率僅次于該事件的是ItemChanged事件和ItemFocusChanged,只要修改了單元中的內(nèi)容,每次觸發(fā)ItemFocusChanged事件都會觸發(fā)ItemChanged事件。在這些事件下編寫過長的腳本會非常影響錄入工作的效率。同樣,事件RowFocusChanged的觸發(fā)頻率也是相當(dāng)高的。一般來說是可以避免在這四個事件中編寫腳本的?!鰀wo參數(shù)使用數(shù)據(jù)窗口的某些事件中可以使用一個稱為dwo的變量,該變量保存數(shù)據(jù)窗口中的部分信息,
3、用數(shù)據(jù)窗口的屬性可以讀取這些信息dwo.type:讀取在dwo中保存的對象類型。對象類型可能有bitmap、button、column、compute、graph、groupbox、line、ole、ellipse、rectangle、roundrectangle、report、tableblob、text、datawindow(當(dāng)用戶沒有單擊特定對象時)dwo.Name:column的列名dwo.Primary[row]:column的數(shù)據(jù)dwo.Selected:選中column的數(shù)據(jù)■數(shù)據(jù)緩沖區(qū)數(shù)據(jù)窗口在運行時要創(chuàng)建四個緩沖區(qū),分別
4、是主緩沖區(qū)、刪除緩沖區(qū)、過濾緩沖區(qū)和原始緩沖區(qū),這四個緩沖區(qū)各司其職、共同配合,來保證數(shù)據(jù)窗口對數(shù)據(jù)的正確處理。下面分別加以介紹。1、主緩沖區(qū)-Primary這是最重要的一個緩沖區(qū),保存的是當(dāng)前顯示在數(shù)據(jù)窗口中的所有數(shù)據(jù)以及它們的修改狀態(tài)。在保存數(shù)據(jù)時使用這些狀態(tài)生成SQL語句。平常的大多數(shù)操作都是針對該緩沖區(qū),函數(shù)中的緩沖區(qū)參數(shù)缺省也是該緩沖區(qū)。2、刪除緩沖區(qū)-Delete該緩沖區(qū)保存所有刪除了的數(shù)據(jù)。保存數(shù)據(jù)時,該緩沖區(qū)中的數(shù)據(jù)用來產(chǎn)生delete語句。在數(shù)據(jù)沒有提交到數(shù)據(jù)庫之前,可以從該緩沖區(qū)中將數(shù)據(jù)恢復(fù)出來。數(shù)據(jù)提交后,該緩沖區(qū)中
5、的數(shù)據(jù)清空。3、過濾緩沖區(qū)-Filter該緩沖區(qū)中保存的是沒有通過過濾規(guī)則的所有數(shù)據(jù),這些數(shù)據(jù)在存儲時同主緩存區(qū)的數(shù)據(jù)一起生成相應(yīng)的insert或update語句。4、原始緩沖區(qū)-original用來保存從數(shù)據(jù)庫中檢索到的初始值,在保存數(shù)據(jù)時用來生成where語句。???上面這四個緩沖區(qū)中,original緩沖區(qū)在腳本中很少使用,其他三個經(jīng)常涉及到,很多數(shù)據(jù)窗口函數(shù)都需要指定對這三個緩沖區(qū)中的哪個進行操作,大多數(shù)情況下都使用缺省的緩沖區(qū)Primary!。這三個緩沖區(qū),除了保存相應(yīng)的數(shù)據(jù)外,都自動維護這些數(shù)據(jù)的修改標志,它們之間的協(xié)作也是自
6、動維護的。例如,當(dāng)使用過濾函數(shù)時,沒有通過過濾規(guī)則的數(shù)據(jù)自動從Primary緩存區(qū)移送到Filter緩存區(qū);執(zhí)行刪除操作時,數(shù)據(jù)自動從Primary緩存區(qū)移送到Delete緩存區(qū)。所有這些數(shù)據(jù)的移送無需腳本的干預(yù),只管使用相應(yīng)的函數(shù)即可?!鯠WBufferPrimary!0Delete!??1Filter!??2■DWItemStatusNotModified!0DataModified!1New!??2NewModified!3■編輯控件和數(shù)據(jù)窗口控件打交道都是通過編輯控件進行的。在數(shù)據(jù)窗口中錄入數(shù)據(jù)、修改數(shù)據(jù),實際上是在修改單元上的編
7、輯控件中的內(nèi)容。當(dāng)編輯控件移動到另外單元上之前,要對編輯控件中的數(shù)據(jù)進行校驗,如果能通過字段的校驗規(guī)則,就保存到字段中。編輯控件是可以移動的,需要編輯哪個單元,編輯控件就移動到哪個單元上,接受輸入或者修改。編輯控件在沒有離開當(dāng)前字段時,用戶錄入或者修改的數(shù)據(jù)就不會被保存到字段中,如何確保在數(shù)據(jù)窗口失去焦點時,最后位置上編輯框中的內(nèi)容不被遺漏呢?前面介紹了在數(shù)據(jù)窗口的LoseFocus事件中編寫如下腳本:this.AcceptText()這個方法在很多情況下能解決該問題。美中不足的是,如果編輯框中的內(nèi)容不能通過字段的校驗規(guī)則,有時會顯示兩次
8、錯誤信息窗口。造成兩個錯誤信息窗口,往往是在選擇其他單元時發(fā)生,在數(shù)據(jù)窗口失去焦點之前(如單擊“保存”按鈕等)只會顯示一個錯誤信息窗口。用戶選擇其他單元時,編輯框中的數(shù)據(jù)開始進行校驗,不能通過