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

如何在DBGrid中改變行的顏色

尚未結案
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-24 20:14:55 IP:61.146.xxx.xxx 未訂閱
我這個程序有何錯誤,不會改變顏色,請指教!! procedure Tenquiry.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin with DBGrid1 do begin if ((State=[gdSelected]) or (State=[gdSelected,gdFocused])) then begin canvas.Font.Color:=ClYellow; canvas.Font.color:=ClNavy; end else begin if (DataSource1.DataSet.RecNo mod 2<>0) then Canvas.Brush.Color:=clWhite else Canvas.Brush.Color:=clRed; end; DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); end; ken
------
ken
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-24 21:17:44 IP:220.135.xxx.xxx 未訂閱
Hi linken 你好, 我測試是正常, 有變顏色

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   with DBGrid1 do begin
      if ((State=[gdSelected]) or (State=[gdSelected,gdFocused])) then begin
         canvas.Font.Color:=ClYellow;
         canvas.Font.color:=ClNavy;
         這兩行請拿掉一行
      end
      else begin
         if (DataSource1.DataSet.RecNo mod 2<>0) then
            Canvas.Brush.Color:=clWhite
         else
            Canvas.Brush.Color:=clRed;
      end;
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
   end;
end;
我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-25 07:39:30 IP:61.146.xxx.xxx 未訂閱
Miles多謝你的指教,可是我要達到的效果是整條行的 顏色都改變,不是觸發它的時候才改變顏色, 也就是這里沒發應,請幫忙,謝謝 if (DataSource1.DataSet.RecNo mod 2<>0) then Canvas.Brush.Color:=clWhite else Canvas.Brush.Color:=clRed; end; DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); ken
------
ken
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-25 08:56:09 IP:210.65.xxx.xxx 未訂閱
Hi linken,    相信你應該已經看過以下討論 http://delphi.ktop.com.tw/topic.php?topic_id=56057 請注意,該篇討論用的 DataSet 為 TADOQuery,我猜測你的 DataSet 應該是 BDE 吧,如此才會造成 DataSet.RecNo 有問題而無變色效果 http://delphi.ktop.com.tw/topic.php?topic_id=25748 你可以更改為 ADO 試試,或是拉一個 DataSetProvider 與 ClientDataSet,用 ClientDataSet 試試,架構大致如下: TDataBase --> TQuery --> TDataSetProvider --> TClientDataSet --> TDatasource --> TDBGrid 發表人 -
------
Fishman
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-25 09:22:43 IP:61.146.xxx.xxx 未訂閱
謝謝fishman的幫助 我是個菜鳥,以後請多多指教. 怎麼才能給你加分啊?? ken
------
ken
linken
一般會員


發表:23
回覆:37
積分:22
註冊:2004-11-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-25 09:47:27 IP:61.146.xxx.xxx 未訂閱
fishman我試過是能達到效果. 可是我以這樣的方法加入我的工程中可是 打開那個窗體要用很久的時間喲.這對於一個 系統來說是不可行的. 試問就用Table DataSource或query DataSource 能實現改變DBGrid中的行的顏色嗎?? 請各位高手多多指教 ken
------
ken
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-25 10:06:16 IP:210.65.xxx.xxx 未訂閱
Hi linken,    試著去調整 TClientDataSet 的 PacketRecords 屬性,應該可以解決部分效能問題,意即不一次取得全部資料來改進效能問題!     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-06-26 23:37:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!