dbgrideh 可以為你提供乙個更加美觀和功能豐富的 dbgird,比如平面化顯示、奇偶行不同顏色(斑馬線)、快速查詢、合計行、grid 列印等。在 ehlib 的後期版本中,還提供了乙個非常強大的過濾功能,他會在 dbgrid 的表頭下方顯示乙個過濾行,使用者在此行的相應列中輸入查詢條件,dbgrideh 可以自動為您篩選出所需要的資料。下圖所示即為啟用過濾功能後的 dbgrideh:
1、過濾實現的前提條件:uses ehlibado, ehlibbde 等 ….
要實現 dbgrideh 的自動過濾,必須先新增 ehlib 的幾個相關 unit 到你的 project 中,如果你使用的是 ado 連線資料庫,請在工程任一 unit 的 uses 列表中新增 ehlibado,如果使用的是 bde,請新增 ehlibbde,其他可能新增的還有:ehlibcds、ehlibdbx、ehlibibx、ehlibmte;
2、啟用過濾,顯示過濾行:dbgrideh.stfilter.visible := true
dbgrideh 預設不顯示過濾行,設定 stfilter.visible 為 true 過濾行就顯示出來了。
3、選擇:客戶端還是伺服器端過濾?dbgrideh.stfilter.local = true|false
這一步很主要。客戶端過濾也就是 query 自身的過濾功能,在記憶體中過濾,不會到伺服器端去查詢,優點是實現簡單,過濾速度快,缺點就是只能獲得本地更新的資料,其他使用者新增和修改的資料無法實時反映出來。
dbgrideh 伺服器端過濾的實現方式是「拼湊」sql 語句。在過濾之前,dbgrideh 繫結的 query 的 sql 語句必須含有 dbgrideh 指定的乙個過濾標記,該過濾標記預設為 /*filter*/,其必須在 sql 任一行的行首,當使用者輸入過濾值時,ehlib 生成過濾條件,並且用此條件替換過濾標記之後的內容,然後將新的sql 語句傳送到資料庫端去執行,獲得的即為過濾後的資料。
具體應該使用哪種過濾方式,需根據實際要求選用。
4、客戶端過濾(本地過濾)的實現:dbgrideh.stfilter.local := true
客戶端過濾實現比較簡單,而且容易理解,設定 local 為 true,過濾功能就 ok 了。
5、伺服器端過濾的實現:dbgrideh.stfilter.local := false
伺服器端過濾需設定 local 為 false,然後剩下的就是 sql 語句,sql 一般為以下樣式:
adoquery.
sql.
text :=
'select * from students where ' +
#13+ '/*filter*/1=1';
以上**生成的 sql 在 sql server 等支援 /* 注釋的資料庫中會非常正確的執行,但在 access 中就會出錯,解決方案也很簡單,更改 dbgrideh 的過濾標記即可:
dbutilseh.
sqlfiltermarker :=
'(1>0)and';
那麼 query 的 sql 應該為以下:
adoquery.
sql.
text :=
'select * from students where ' +
#13+ '(1>0)and 1=1';
伺服器端過濾也 ok 了!
6、過濾行下拉列表的實現:column.stfilter.listsource、listfield、keyfield
dbgrideh 的過濾行可以將某列已存在的值以 combobox 的形式顯示出來,要實現此功能,需設定 dbgrideh 列的 stfilter 屬性。將 listsource 設為要下拉顯示的資料來源,listfield 為下拉列表顯示的字段,keyfield 為構建查詢表示式使用的字段。
設定以上屬性後,你可能發現雖然下拉列表顯示出來了,但選擇下拉列表值後,dbgrideh 卻沒有自動過濾,在單元的 initialization 節新增以下**即會自動過濾了:
dbgridehcenter.
true;
這個方法感覺很奇怪,而且在使用中好像也有問題,當輸入 > 《這樣的表示式時,查詢時會出錯。在官方的 demo 中,是通過記憶體表的方式實現的,而且不用設定任何屬性(上面的 listsource 等都不用設定),即可自動在過濾行每列處顯示下拉列表,詳細用法請參照 ehlib 安裝目錄下的 demo。
安裝ehlib控制項
1 當然是先要解除安裝以前安裝的ehlib元件了,在選單的 component 的 install packeges 裡,選擇ehlib xx,選擇 remove 2 最後就是要安裝元件了,然後開啟ehlib目錄下的ehlib70.dpk,選擇 compile 編譯一下,不要安裝,隨後再開啟dcle...
ehlib 用法記錄
點列頭排序 1.add ehlibado.pas to project.2.grideh columndefvalues title titlebutton true 3.grideh sortlocal true 4.grideh optionseh dghautosortmarking true...
EhLib 的安裝方法
delphi控制項安裝 ehlib 的安裝方法。每次安裝delphi 不管是d7 還是d6總是和她戰鬥很長時間,不是d7本身的問題,而是一大堆控制項的問題。所以每次安裝的時候都很頭疼,下面是在網上的一篇安裝ehlib的教程,對我太有幫助啦。此篇 ehlib 使用教程簡單描述一下 ehlib 的安裝方...