增量查詢(資料匹配)與資訊互動

2021-06-07 08:48:11 字數 3553 閱讀 1259

一、在下拉資料視窗中查詢與輸入資料匹配的資料

我們從下拉資料視窗中查詢資料時,一般是需要從下拉資料視窗的第一行開始查詢。如果下拉資料視窗中的資料很少,這樣查詢很方便。但是,如果下拉資料視窗中的資料很多,用此法查詢起來就會很麻煩。如果下拉資料視窗具有自動匹配功能,即將資料輸入該列時,該列的下拉資料視窗自動滾動到與輸入資料最匹配的第乙個資料所在的行,並且高亮度顯示該行。這樣就可以在很短的時間內查詢到使用者所需的資料,省去了使用者在下拉資料視窗中查詢的麻煩,提高了輸入資料的準確性及查詢相關資料的效率。實現這一功能,需在資料視窗控制(dw-1)的「editchanged」事件中寫入如下**:

//定義變數

string ls_search,ls_col_name,ls_type,ls_mach

datawindowchild child

long ll_count=1

long ll_mthrow

string ll_mthtext

long ll_searchrow=0

//判別當前列是否具有下拉資料視窗,如果不具有,則退出事件程式

ls_col_name=dw_1.getcolumnname()

if dw_1.getchild(ls_col_name,child)〈0 then

return

end if

//獲得下拉資料視窗的顯示列及其型別

ls_col_name=this.describe(ls_col_name+".dddw.displaycolumn")

ls_type=child.describe(ls_col_name+".coltype")

//獲得輸入到列中的文字

ls_search=dw_1.gettext()

if len(ls_search)=0 then

return

end if

//找出下拉資料視窗中與輸入資料最匹配的行

if ls_type="number" then

do until ll_count〉child.rowcount()

ll_mthrow=child.getitemnumber(ll_count,ls_col_name)

if left(string(ll_mthrow),len(ls_search))=ls_search then

ll_searchrow=ll_count

exit

else

ll_count=ll_count+1

end if

loop

else

do until ll_count〉child.rowcount()

ll_mthtext=child.getitemstring(ll_count,ls_col_name)

if left(ll_mthtext,len(ls_search))=ls_search then

ll_searchrow=ll_count

exit

else

ll_count=ll_count+1

end if

loop

end if

if ll_searchrow〉0 then

//下拉資料視窗中被選中的行以高亮度顯示

child.setrow(ll_searchrow)

if ls_type="number" then

ls_mach=string(child.getitemnumber(ll_searchrow,ls_col_name))

dw_1.setitem(dw_1.getrow(),dw_1.getcolumn(),ls_mach)

else

ls_mach=child.getitemstring(ll_searchrow,ls_col_name)

dw_1.setitem(dw_1.getrow(),dw_1.getcolumn(),ls_mach)

end if

child.selectrow(ll_searchrow,true)

end if

注意,在帶有下拉資料視窗的列中,必須指定該列的「allow editing」屬性為true。

二、在視窗和使用者物件間實現資訊互動的技巧

在實際應用中經常需要將視窗物件的資訊傳遞給該視窗引用的乙個使用者物件,或者將使用者物件的引數傳遞給視窗物件。實現兩者之間的資訊互動有很多方法與技巧,我在這裡介紹其中的三種方法。

1.直接引用物件屬性

實現視窗與使用者物件通訊的最簡單方法是直接引用物件的屬性。例如,如果在視窗中有乙個名為uo_1的使用者物件控制項,它關聯乙個定製的可視使用者物件,這個定製的使用者物件有乙個名為sle_1的單行編輯器,則可以在視窗的指令碼中編寫如下**:

uo_1.sle_1.text=string(today())

這種方法簡單,但是視窗和使用者物件之間的介面比較模糊。為了保持在使用者物件和視窗之間有乙個清晰的介面,最好通過函式和使用者事件來與使用者物件通訊。

2.使用函式實現視窗與使用者物件的通訊

當要從視窗傳遞資訊給使用者物件時,首先在使用者物件描繪器中為使用者物件定義乙個使用者物件級的函式,它的訪問許可權是public。接著為該函式定義需要傳遞的輸入引數,這些引數的實際值來自於視窗物件。當把定義好的使用者物件放入視窗後,在視窗的指令碼中呼叫該使用者物件級函式,把實際的資訊值通過使用者物件函式的引數傳遞過去。這樣,使用者物件就可以處理視窗物件中的資訊了。

例如,定義乙個可視使用者物件,其中包含乙個單行編輯控制項,當使用者在其中輸入字串後,將所輸入的字串傳送到視窗的單行編輯控制項sle_1中。

首先在視窗描繪器中定義乙個視窗函式wf_1,它有乙個引數sf,用於接受來自使用者物件的字串。該函式體只有一條**,把接受的引數顯示在單行編輯控制項sle_1中:

sle_1.text=sf

然後在使用者物件描繪器中定義乙個可視使用者物件,包括乙個單行編輯控制項sle_u1,在sle_u1的modified事件中輸入下面的**:

parent.f2(this.text)

其中f2是使用者物件級函式。由於在使用者物件的控制項中無法呼叫視窗的函式,所以先在使用者物件中呼叫使用者物件級的函式,將字串傳遞給f2的引數,然後在f2中呼叫視窗函式wf_1。使用者物件函式f2的**如下:

parent.dynamic wf_1(ff)

注意其中的dynamic關鍵字不能省略。這是因為,在使用者物件描繪器中無法確定該使用者物件所在視窗是否有此函式,所以需要在執行時確定此語句的正確性。

3.使用使用者事件實現視窗與使用者物件的通訊

把定製的使用者物件放在視窗或者另乙個定製的使用者物件中之後,只能給該使用者物件的事件編寫指令碼,而不能給該使用者物件中的控制項編寫指令碼。因此,經常需要為使用者物件定義使用者事件,然後在windows描繪器中為使用者事件編寫指令碼,這樣就可以實現在視窗中引用使用者物件中的控制項。

例如,定義一可視使用者物件,包括乙個命令按鈕,為該可視使用者物件定義乙個使用者事件「ue_user」,在命令按鈕的clicked事件中編寫程式**:

parent.triggerevent(″ue_user″)

把該使用者物件放在視窗中。在視窗中該使用者物件的script描繪器的select event下列表中,可以發現為該使用者物件所宣告的使用者事件「ue_user」並可為它編寫**,從而實現在視窗中引用使用者物件中的控制項。

java jsp與資料庫資訊的互動

string path request.getcontextpath 獲取jsp所在工程的名稱 var ids new array 1 前台如果傳的是乙個集合,後台可以使用引數 requestbody listids 來接收 2 如果前台是這種傳值方式 data 那後台可以通過建立乙個欄位名稱對應的...

python 與 mongodb的互動 查詢

python與mongo資料庫互動時,在查詢的時候注意的一些小問題 1 from pymongo import 2def find func 3 建立連線物件 4 client mongoclient port 27017,host localhost 5 選擇要使用的資料庫 6 db client...

模糊匹配查詢 資料查詢,別忘了模糊匹配

今天給大家分享乙個公式查詢的excel技巧。一般情況下,公司或者單位都會有乙個 簿共公司職員查詢。當你面對乙個有上百人的 簿時,是不是發現查詢乙個人的 或者資訊比較難啊。今天或許能幫你解決這個問題,先來看基礎資料 再來看看查詢的動畫演示 乙個find函式,乙個small函式,乙個index函式,乙個...