如何寫出DbGrid報表用顏色區分篩選的資料 |
答題得分者是:eaglewolf
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
請問我的報表列出是DbGrid
可以利用顏色篩選某各欄位的不同嗎? 假設我現在有一各欄位STATUS 0為正常 1為不正常 那可以當資料為1的時候 整筆序號顯示成為紅色嗎? IF STATUS = '1' THEN BEGIN .................. 以下是我的SHOW的SQL ===================== SQL ============================= procedure TForm1.Button10Click(Sender: TObject); //全部列出 begin Query1.SQL.Clear; Query1.SQL.Add('SELECT (狀態) STATUS,(MODEL) 機種,(DESCS) 原因說明,(PROCESS) 工作站,(EMP) 領料人員 FROM TEST.DBF'); Query1.SQL.Add('ORDER BY SEQ DESC'); Query1.CLOSE; Query1.OPEN; end; ===================== END =============================
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
mypigbaby
高階會員 發表:11 回覆:168 積分:155 註冊:2006-07-20 發送簡訊給我 |
豬寶寶之前做的範例給您參考
[code delphi] procedure TForm1.DG1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected IN State then exit; //有選擇的話不要重畫 if query1.FieldByName('STATUS').value=1 then (Sender as TDBGrid).Canvas.Brush.Color := clRed; //定義背景顏色(紅色 時間來不及了) else (Sender as TDBGrid).Canvas.Brush.Color := RGB(255, 255, 223); //定義背景顏色(米黃色) end; [/code] |
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
//你若是想要STATUS='1', 整行 呈現 紅色, Ex:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Canvas:TCanvas; begin Canvas := (Sender as TDBGrid).Canvas; if Query1.FieldByName('STATUS').AsString = '1' then begin Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); DBGrid1.DefaultDrawDataCell(Rect, Field, State); end; end;
------
What do we live for if not to make life less difficult for each other? |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
第一種
[code delphi] procedure TForm1.DBGrid3DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin if gdSelected IN State then exit; //有選擇的話不要重畫 if query1.FieldByName('工單').value=1 then begin (Sender as TDBGrid).Canvas.Brush.Color := clRed; //定義背景顏色(紅色 時間來不及了) end else (Sender as TDBGrid).Canvas.Brush.Color := RGB(255, 255, 223); //定義背景顏色(米黃色) end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
第二種
[code delphi] procedure TForm1.DBGrid3DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Canvas:TCanvas; begin Canvas := (Sender as TDBGrid).Canvas; if Query1.FieldByName('工單').AsString = '1' then begin Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); DBGrid3.DefaultDrawDataCell(Rect, Field, State); end; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
恩 恩 這裡
我希望打開資料庫就 就秀出紅色 [code delphi] procedure TForm1.FormActivate(Sender: TObject); begin Query1.DatabaseName := GetCurrentDir; Query2.DatabaseName := GetCurrentDir; Query1.SQL.Clear; Query1.SQL.Add('SELECT (SEQ) 流水號,(WO) 工單,(MODEL) 機種,(PART) 料號,(PART_NO) 品名,(ESTIMATES) 領退數量,(PHYSICAL) 實際數量,(DESCS) 原因說明,(PROCESS) 工作站,(EMP) 領料人員,(UP_TIME) 領料日期 FROM TEST.DBF'); Query1.SQL.Add('ORDER BY SEQ DESC'); Query1.CLOSE; Query1.OPEN; DateTimePicker1.Date := NOW; DateTimePicker2.Date := NOW-7; DateTimePicker3.Date := NOW; DateTimePicker4.Date := NOW; end; procedure TForm1.DBGrid3DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Canvas:TCanvas; begin Canvas := (Sender as TDBGrid).Canvas; if Query1.FieldByName('領退數量').AsString = '0' then begin Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); DBGrid3.DefaultDrawDataCell(Rect, Field, State); end; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet
編輯記錄
lovemari 重新編輯於 2007-11-01 11:58:24, 註解 無‧
|
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
|
mypigbaby
高階會員 發表:11 回覆:168 積分:155 註冊:2006-07-20 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
囧...三各都可以跑 但沒一各顯示紅色
怎回事@_@a [code delphi] procedure TForm1.DBGrid3DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Canvas:TCanvas; begin Canvas := (Sender as TDBGrid).Canvas; if (StrToIntDef(Query1.FieldByName('領退數量').AsString,0) = 0) then //(Query1.FieldByName('領退數量').AsString = '0') //(trim(Query1.FieldByName('領退數量').AsString)='') //(StrToIntDef(Query1.FieldByName('領退數量').AsString,0) = 0) begin Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); DBGrid3.DefaultDrawDataCell(Rect, Field, State); end; end; [/code]
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
|
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
是否ZIP你的ACCESS / dpr / res / dfm / pas ?
===================引 用 lovemari 文 章=================== 恩恩 我欄位是數值沒錯 值也是0 #$0 ??? < -不懂 我確認資料無誤= = DATABASE 是ACCESS 的...DELPHI 7 去寫的 新增刪除修改資料庫都OK 那應該沒問題 怎會顏色都無法@@顯示
------
What do we live for if not to make life less difficult for each other? |
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
TO樓上大大
沒有耶....副檔名.DBF 有無可能是我設定上的問題 DBGrid的設定上的問題 ? 譬如說...顯示顏色設定false 還是要加什麼元件上去才會有顏色?_? ps.新手請多多包含@@ 元件有 SaveDialog Query 1 and 2 GridExport PopupMenu DataSource1
------
Program : Delphi 7 DataBase : Oracle 9i Client : ClientDataSet |
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
Delphi 的說明文件:
Do not write an OnDrawDataCell event handler. OnDrawDataCell is obsolete and included for backward compatibility. Instead, write an OnDrawColumnCell event handler. 請改用OnDrawColumnCell [code delphi] procedure TForm1.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (Query1.FieldByName('領退數量').AsInteger = 0) then TDBGrid(Sender).Canvas.Brush.Color := clRed else TDBGrid(Sender).Canvas.Brush.Color := clWhite; //正常白色 TDBGrid(Sender).Canvas.FillRect(Rect); TDBGrid(Sender).DefaultDrawDatacell(Rect, Column.Field, State); TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column , State); end; [/code] ===================引 用 lovemari 文 章=================== 恩 恩 這裡 我希望打開資料庫就 就秀出紅色 [code delphi] procedure TForm1.FormActivate(Sender: TObject); begin Query1.DatabaseName := GetCurrentDir; Query2.DatabaseName := GetCurrentDir; Query1.SQL.Clear; Query1.SQL.Add('SELECT (SEQ) 流水號,(WO) 工單,(MODEL) 機種,(PART) 料號,(PART_NO) 品名,(ESTIMATES) 領退數量,(PHYSICAL) 實際數量,(DESCS) 原因說明,(PROCESS) 工作站,(EMP) 領料人員,(UP_TIME) 領料日期 FROM TEST.DBF'); Query1.SQL.Add('ORDER BY SEQ DESC'); Query1.CLOSE; Query1.OPEN; DateTimePicker1.Date := NOW; DateTimePicker2.Date := NOW-7; DateTimePicker3.Date := NOW; DateTimePicker4.Date := NOW; end; procedure TForm1.DBGrid3DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); var Canvas:TCanvas; begin Canvas := (Sender as TDBGrid).Canvas; if Query1.FieldByName('領退數量').AsString = '0' then begin Canvas.Brush.Color := clRed; Canvas.FillRect(Rect); DBGrid3.DefaultDrawDataCell(Rect, Field, State); end; end; [/code]
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL
編輯記錄
eaglewolf 重新編輯於 2007-11-02 16:51:45, 註解 無‧
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |