再請教DBGrid的背景顏色問題 |
答題得分者是:tech_state
|
furbylin
一般會員 發表:6 回覆:29 積分:12 註冊:2003-08-29 發送簡訊給我 |
使用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 發送簡訊給我 |
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 發送簡訊給我 |
版主, 您好:
我知道您是用三種背景顏色來做區隔, 但是您可能誤會我意思了, 問題出在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 發送簡訊給我 |
|
furbylin
一般會員 發表:6 回覆:29 積分:12 註冊:2003-08-29 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
furbylin, 您好
上傳檔案請到『會員求助程式檔案上傳區』(以下連結資料)
http://delphi.ktop.com.tw/forum.asp?FORUM_ID=97 =================================
涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。
是非終日有,不聽自然無
天下本無事,庸人自擾之
|
furbylin
一般會員 發表:6 回覆:29 積分:12 註冊:2003-08-29 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
furbylin, 您好
測試過您的project後,
發現癥結點在Query1的RequestLive這個屬性,
因為我之前測試都是用Default值(false),
而您的設定是true。 若將該屬性改為false,
不知對您的程式是否有影響?
如果沒有影響,就這樣囉!< >
如果有影響,就要再花一點時間測試了。< > =================================
涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。
是非終日有,不聽自然無
天下本無事,庸人自擾之
|
furbylin
一般會員 發表:6 回覆:29 積分:12 註冊:2003-08-29 發送簡訊給我 |
您好:
我測試過, 確實如您所說將RequestLive屬性改為false就ok, 真是辛苦您了, but...
很不幸地, 我就是希望能修改Record內容, 又不希望用到TTable元件(TTable元件查詢很花時間), 不知是否還有其他的解決辦呢? 是否還有其他的屬性可以取代RecNo, 比如說現在畫的是結果集第幾筆資料的屬性...等.
接著我要將Paradox資料庫換成MySQL, 結果又是遇到一堆問題, 對於初次寫資料庫的我真是< >, 我會再開另外的主題來發問地.< >
|
furbylin
一般會員 發表:6 回覆:29 積分:12 註冊:2003-08-29 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
furbylin, 您好
因為最近比較忙,
沒有多餘的時間可以幫您測試這個問題,
所以給您個建議,
讓您自己也試試看。 由之前的討論得知Query1的RequestLive屬性是關鍵所在,
您是否也可以往這個方向去試試,
在某個時間點改變Query1的RequestLive屬性為true或為false,
以達到您的需求。 另外,上次測試您的Project,
發現一個問題,(或許您自己也發現了< >)
您的 > 文字表達能力不好,< >
如果您不了解我所說的,< >
請您多試幾次。< > =================================
<>涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。
是非終日有,不聽自然無
天下本無事,庸人自擾之
|
furbylin
一般會員 發表:6 回覆:29 積分:12 註冊:2003-08-29 發送簡訊給我 |
版主, 您好:
我照您的方法實際操作一遍, 就是在按了某個按鈕之後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(); 謝謝您的提示, 辛苦了! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |