線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2157
推到 Plurk!
推到 Facebook!

控制DBGird某一列的顏色,,那邊錯了??

答題得分者是:frappe
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-26 17:06:25 IP:122.116.xxx.xxx 訂閱
小弟想藉由某一欄位的值來控制該列的顏色

譬如說

欄位7 的值只有 0 跟 1
如果值=0 那該呈現白色
如果值=1 那該呈現紅色

希望呈現的是該列 而不是整各Grid

這是之前StringGrid的寫法
那我想改寫成DBGrid 該怎麼改呢?
我想AnsiReplaceStr(Cells[13, ARow] 改成
TDBGrid(Sender).Columns.Items[7] 卻不行


[code delphi]
procedure TForm1.AdvStringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
iRate: Integer;
begin
if gdFixed in State then Exit;
with Sender as TAdvStringGrid do
begin
iRate := StrToIntDef(AnsiReplaceStr(Cells[13, ARow], '%', ''), -1);
if iRate < 56 then
begin
case iRate of
1..56: Canvas.Font.Color := clRed; //控制數值rage 來寫顏色
//96..100: Canvas.Brush.Color := clWhite;
end;
Canvas.TextRect(Rect, Rect.Left, Rect.Top, Cells[ACol, ARow]);
end;
end;

end;
[/code]


------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
編輯記錄
lovemari 重新編輯於 2008-12-26 17:06:51, 註解 無‧
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-26 20:26:30 IP:211.72.xxx.xxx 訂閱
此為 DBGrid 的原始程式碼 DrawCell() 的限制, 除非自行繼承改寫, 否則難以控制!
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-27 02:42:41 IP:115.83.xxx.xxx 訂閱
你只要在DBGrid的OnDrawColumnCell的Event寫幾行程式就OK哩

[code delphi]
procedure XXX.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DMS.xxxxxxx.AsInteger =1 then
begin
DBGrid1.Canvas.Brush.Color:=clRed;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;

[/code]

lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-29 13:09:21 IP:122.116.xxx.xxx 訂閱
DEAR 

想請問我那裡下錯了??


[code delphi]
procedure TForm1.DBGrid9DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
IF StrToInt(DBGrid9.Columns.Items[7]) > 1 then // 這行顯示錯誤
begin
DBGrid9.Canvas.Brush.Color:=clRed;
DBGrid9.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
[/code]
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-12-29 19:28:43 IP:115.82.xxx.xxx 訂閱
IF StrToInt(DBGrid9.Columns.Items[7]) > 1 then
改成這樣試試看
if StrtoInt(DBGrid9.Fields[7].value)>1 then

===================引 用 lovemari 文 章===================
DEAR

想請問我那裡下錯了??


[code delphi]
procedure TForm1.DBGrid9DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
IF StrToInt(DBGrid9.Columns.Items[7]) > 1 then // 這行顯示錯誤
begin
DBGrid9.Canvas.Brush.Color:=clRed;
DBGrid9.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;
[/code]
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-12-30 09:46:17 IP:122.116.xxx.xxx 訂閱
可以了 謝謝
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
系統時間:2024-04-29 3:28:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!