兩種方式自訂 DBGrid 列/欄顏色
方式一:OnDrawColumnCell 事件繪製間隔列
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
// 奇數列 (RecNo 從 1 起) 設為淺藍背景
if (Column->Field->DataSet->RecNo % 2) {
DBGrid1->Canvas->Brush->Color = clSkyBlue;
DBGrid1->Canvas->FillRect(Rect);
}
// 繪製文字 (置中單行)
DrawText(DBGrid1->Canvas->Handle,
Column->Field->Text.c_str(), -1,
(RECT*)&Rect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
}
方式二:按鈕點擊設定欄位固定背景色
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i = 0; i < DBGrid1->Columns->Count; i++) {
if (i % 2 == 0)
DBGrid1->Columns->Items[i]->Color = clAqua;
else
DBGrid1->Columns->Items[i]->Color = clInfoBk;
}
}
說明
- 方式一動態繪製,支援資料變動時自動交替色,需自行繪製文字。
- 方式二靜態設定欄位
Color 屬性,簡單但不支援列交替。
- 兩者可結合使用:欄位底色 + 列交替色 (需在繪製前判斷)。