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

再請教DBGrid的背景顏色問題

答題得分者是:tech_state
furbylin
一般會員


發表:6
回覆:29
積分:12
註冊:2003-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-17 17:23:08 IP:61.221.xxx.xxx 未訂閱
使用DBGrid中該如何做到兩種背景顏色的顯示呢? 若根據以下這兩篇文章的討論是可以做到, 但是如果DBGrid要顯示的是經過selected (Query)過後的Result DataSet, 則 if(Column->Field->DataSet->RecNo%2) 這一行會有問題, 也就是有連續二行或二行以上會出現相同背景顏色, 我想問題出在RecNo, 該如何解決呢?    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=35569 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26419
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-19 10:01:29 IP:61.221.xxx.xxx 未訂閱
furbylin, 您好 請試試以下的code。  
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
   if((Column->Field->DataSet->RecNo - 1) % 3 == 0)
   {
      DBGrid1->Canvas->Brush->Color=clRed;
      DBGrid1->Canvas->FillRect(Rect);
   }
   else if((Column->Field->DataSet->RecNo - 1) % 3 == 1)
   {
      DBGrid1->Canvas->Brush->Color=clBlue;
      DBGrid1->Canvas->FillRect(Rect);
   }
   else if((Column->Field->DataSet->RecNo - 1) % 3 == 2)
   {
      DBGrid1->Canvas->Brush->Color=clGreen;
      DBGrid1->Canvas->FillRect(Rect);
   }
   DrawText(DBGrid1->Canvas->Handle, Column->Field->Text.c_str(),-1,(RECT*)&Rect,DT_SINGLELINE | DT_VCENTER |DT_CENTER);
}
 
================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之 發表人 - tech_state 於 2003/09/19 10:11:22
furbylin
一般會員


發表:6
回覆:29
積分:12
註冊:2003-08-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-19 13:45:32 IP:61.221.xxx.xxx 未訂閱
版主, 您好:   我知道您是用三種背景顏色來做區隔, 但是您可能誤會我意思了, 問題出在RecNo這個屬性不能表逹出我想要的目的, 比如說資料表裡總共有六筆資料, 經Query運算後, 選擇出來的結果集有第1,3,5筆, RecNo這個屬性就是記錄著1,3,5, 經過%2運算後, 則DBGrid上所顯示的三筆背景顏色都將是銀色, 以下是我的部份程式碼, 若照您的方法, 選擇出來的結果集如果是第1,4筆, 則DBGrid所呈現出來的二行背景顏色一樣是紅色, 這樣了解嗎? 是不是有其他方法可以呈現出背景顏色互相間隔?    
void __fastcall TfrmLFAQ::DBGrid1DrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
    if(Column->Field->DataSet->RecNo%2)
    {
        DBGrid1->Canvas->Brush->Color=clSilver;
        DBGrid1->DefaultDrawColumnCell(Rect, DataCol, Column, State);
    }
}
 
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-21 23:29:28 IP:203.204.xxx.xxx 未訂閱
furbylin, 您好 我測試了您提供的code之後,沒有您說的情形。 不知可否提供您完整的Project及資料庫?    ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
furbylin
一般會員


發表:6
回覆:29
積分:12
註冊:2003-08-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-26 17:56:19 IP:61.221.xxx.xxx 未訂閱
引言: furbylin, 您好 我測試了您提供的code之後,沒有您說的情形。 不知可否提供您完整的Project及資料庫? ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
不好意思, 請問如何上傳檔案?
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-26 21:08:50 IP:61.227.xxx.xxx 未訂閱
有沒有長官測試過 若畫面上StringGrid 扣掉 Fixed Row 不算外 其它的 Row Count 數是奇數的話 交叉變色的情況會變成怎樣的畫面...
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-29 09:43:27 IP:61.221.xxx.xxx 未訂閱
furbylin, 您好 上傳檔案請到『會員求助程式檔案上傳區』(以下連結資料) http://delphi.ktop.com.tw/forum.asp?FORUM_ID=97 ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
furbylin
一般會員


發表:6
回覆:29
積分:12
註冊:2003-08-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-29 10:48:36 IP:61.221.xxx.xxx 未訂閱
版主, 您好: 我已放上, 請撥空過目, tks!
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-29 15:26:52 IP:61.221.xxx.xxx 未訂閱
furbylin, 您好 測試過您的project後, 發現癥結點在Query1的RequestLive這個屬性, 因為我之前測試都是用Default值(false), 而您的設定是true。    若將該屬性改為false, 不知對您的程式是否有影響? 如果沒有影響,就這樣囉!< > 如果有影響,就要再花一點時間測試了。< > ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
furbylin
一般會員


發表:6
回覆:29
積分:12
註冊:2003-08-29

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-29 17:14:07 IP:61.221.xxx.xxx 未訂閱
您好:   我測試過, 確實如您所說將RequestLive屬性改為false就ok, 真是辛苦您了, but...   很不幸地, 我就是希望能修改Record內容, 又不希望用到TTable元件(TTable元件查詢很花時間), 不知是否還有其他的解決辦呢? 是否還有其他的屬性可以取代RecNo, 比如說現在畫的是結果集第幾筆資料的屬性...等.   接著我要將Paradox資料庫換成MySQL, 結果又是遇到一堆問題, 對於初次寫資料庫的我真是< >, 我會再開另外的主題來發問地.< >
furbylin
一般會員


發表:6
回覆:29
積分:12
註冊:2003-08-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-30 10:03:00 IP:61.221.xxx.xxx 未訂閱
當我將資料庫換成MySQL時, 情況更糟糕, RecNo永遠等於-1, 不管TQuery的RequestLive屬性是true或false, 所以DBGrid1每一行背景顏色都是clSilver, 真是傷透腦筋, 另外
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-30 22:46:23 IP:203.204.xxx.xxx 未訂閱
furbylin, 您好 因為最近比較忙, 沒有多餘的時間可以幫您測試這個問題, 所以給您個建議, 讓您自己也試試看。    由之前的討論得知Query1的RequestLive屬性是關鍵所在, 您是否也可以往這個方向去試試, 在某個時間點改變Query1的RequestLive屬性為true或為false, 以達到您的需求。    另外,上次測試您的Project, 發現一個問題,(或許您自己也發現了< >) 您的 > 文字表達能力不好,< > 如果您不了解我所說的,< > 請您多試幾次。< > ================================= <>涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
furbylin
一般會員


發表:6
回覆:29
積分:12
註冊:2003-08-29

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-10-01 19:14:45 IP:61.221.xxx.xxx 未訂閱
版主, 您好:   我照您的方法實際操作一遍, 就是在按了某個按鈕之後RequestLive=true, 不過要注意先後:
    Query1->Active = false;
    Query1->RequestLive=true ;
    Query1->Active = true;
這樣是可行的, 但是如果資料集是經過選擇過的, 即使RequestLive=true也沒辦法在DBEdit中寫入 沒關係, 路不轉人轉, 我把 class="code"> frmLFAQ->Query1->Close(); frmLFAQ->Query1->SQL->Clear(); frmLFAQ->Query1->SQL->Add("Update table_cb"); frmLFAQ->Query1->SQL->Add("Set Cstr_HPNo=:HPNo, Cstr_HPName=:HPName, Cstr_ContactName=:ContactName, Cstr_Tel=:Tel, Cstr_Ext=:Ext, Cstr_Mobil=:Mobil, Cstr_Fax=:Fax, Cstr_ZIP=:ZIP, Cstr_Address=:Address"); frmLFAQ->Query1->SQL->Add("Where Cstr_ID=:ID"); frmLFAQ->Query1->ParamByName("ID")->AsInteger = cstr_id; frmLFAQ->Query1->ParamByName("HPNo")->AsString = Edit1->Text; frmLFAQ->Query1->ParamByName("HPName")->AsString = Edit2->Text; frmLFAQ->Query1->ParamByName("ContactName")->AsString = Edit3->Text; frmLFAQ->Query1->ParamByName("Tel")->AsString = Edit4->Text; frmLFAQ->Query1->ParamByName("Ext")->AsString = Edit5->Text; frmLFAQ->Query1->ParamByName("FAX")->AsString = Edit6->Text; frmLFAQ->Query1->ParamByName("Mobil")->AsString = Edit7->Text; frmLFAQ->Query1->ParamByName("ZIP")->AsString = Edit8->Text; frmLFAQ->Query1->ParamByName("Address")->AsString = Edit9->Text; if (!frmLFAQ->Query1->Prepared) frmLFAQ->Query1->Prepare(); frmLFAQ->Query1->ExecSQL(); 謝謝您的提示, 辛苦了!
系統時間:2024-05-06 1:49:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!