鎖定DBGrid左邊的列

2021-04-06 15:10:27 字數 1761 閱讀 7392

我在使用 delphi3 進行資料庫程式設計的時候,希望 dbgrid 構件在顯示資料的時候能象foxpro 的 browse 命令一樣,鎖定左邊指定的幾列不進行滾動,請問應用什麼方法來實現?

我們知道 delphi 的 tstringgrid 有乙個屬性 fixedcols 來指定不滾動的列。雖然tdbgrid 不能直接使用這一屬性,但通過強制型別轉換也可以首先這一功能,因為這兩個類都來自 tcustomgrid 類。下面我們以 delphi 3.0的 demos/db/ctrlgrid 為例來說明具體的用法。在這個例子的 tfmctrlgrid.formshow 過程中加入如下一行:

tstringgrid(dbgrid1).fixedcols := 2;

執行該程式,在左右移動各列時,symbol 列不會移動。除了這種方法,也可以採用下面的方法:首先在 form 宣告部分加上

type tmygrid = class(tdbgrid) end;

然後在 tfmctrlgrid.formshow 過程中加入:

tmygrid(dbgrid1).fixedcols := 2;

兩者從形式上略有不同,但實質都是一樣的。我們這裡設定 fixedcols 為 2,這是因為在 dbgrid 構件最左側有個指示列,如果你將 dbgrid 的 options 屬性的 dgindicator 設為false,則應設定 fixedcols 為1。  

2003-11-11 17:21:36 

使dbgrid的某幾筆資料變色

你可在 dbgrid 元件的 drawdatacell 事件中依資料的條件性來改變格仔或文字的顏色.

如 :ondrawdatacell(...)

begin

with tdbgrid(sender) do

begin

if (條件) then

canvas.textout(rect.left + 4

rect.top + 2

'要顯示的文字如**的資料');

end;

而你會看到 dbgrid 的顯示資料怎麼有重疊的情況那是因為原本dbgrid要顯示的資料與 textout 所顯示的資料重疊

解決方法 :

在 query 元件所加入的字段(在元件上按右鍵會有 add fields...的選單)在不要顯示資料的字段的 ongettext 事件中有一引數設定為 false;

procedure tform1.query1detail1gettext(sender: tfield; var text: string;

displaytext: boolean);

begin

// 決定在 dbgrid 得知**資料時要不要顯示所得到的資料false -> 不顯示

// 就可避免與 textout 的文字重疊了

displaytext : = false;

end;

end;

如果用 delphi 3 處理很簡單.例如:對錶中某字段當其數值小於0時為紅字其他為黑字.

在 dbgrid.ondrawcolumncell(...) 中:

begin

if tablefield.asinteger < 0 then

dbgrid.canvas.font.color := clred

else

dbgrid.canvas.font.color := clblack;

dbgrid.defaultdrawcolumncell(...);

end;

這樣對 field 指定的格式仍舊生效不必重寫.

Delphi中實現DBGrid列寬度自動調整

發現一些erp的軟體的查詢,查詢出來結果之後,有的字段列寬過大,這時候要通過右鍵 初始化 設定 這樣的方式來調整 的列寬。這樣操作讓人覺得麻煩,突然在網上看到這樣的一篇文章,記下來備用。大多數程式設計的愛好者選擇並使用delphi來編寫軟體,都是被其中豐富而功能強大的vcl控制項所吸引。delphi...

單擊dbgrid列標題排序 公升降序

delphi中如何通過單擊列標題進行公升降排序,在dbgrid的ontitleclick事件裡新增這樣的事件處理 3 if frmdatapool.qry需要做的事.sql.text.contains desc then 4 begin 5 with frmdatapool.qry需要做的事 do ...

獲取Dbgrid當前選中的行號和列號?(經典)

引自 這是很多人經常需要實現的功能,但是tdbgrid類並沒有提供類似col和row的屬性,所以不能直接獲得這些資訊。所以有很多朋友就開始從datasource來開始想辦法。但是我們靜下心來考慮,雖然tdbgrid沒有提供col和row屬性,但是他的基類tcustomgrid卻是實現了row和col...