如何改变DBGRID某些特定的单元格的背景色?
DBGrid_Test已经从ADOQ_Test取来了数据,
现在要改变DBGrid_Test满足条件的某些行的第三列c的单元格的背景色,与这些单元格所在行的第一列a的数据相符合的数据放在一张表里,这张表的数据通过ADOQ_Table取来了,然后写了下面的代码:
- C/C++ code
void __fastcall TfrmMain::DBGrid_TestDrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumnEh *Column, TGridDrawState State){for( int i=0;i<ADOQ_Table->RecordCount;i++ ){ if( ADOQ_Test->FieldByName("a")->AsString==ADOQ_Table->FieldByName("a")->AsString ) { DBGrid_Test->Canvas->Font->Color = clBlue; } ADOQ_Table->RecNo++;}DBGrid_Test->DefaultDrawColumnCell(Rect,DataCol,Column,State);}
结果是DBGrid_Test里面只有与ADOQ_Table的最后一行的数据相同的那行的内容的颜色显示为蓝色,而其他同样满足条件的都没有显示为蓝色。
这不是我想要的结果,我想要的结果是:
1,所有满足条件的都要显示为蓝色
2,我只要这些满足条件的行的第三列单元格的背景色为蓝色
请大侠们帮助我,谢谢!
[解决办法]
- C/C++ code
for( int i=0;i<ADOQ_Table->RecordCount;i++ ){ ADOQ_Table->RecNo = i; if( ADOQ_Test->FieldByName("a")->AsString==ADOQ_Table->FieldByName("a"->AsString ) { DBGrid_Test->Canvas->Font->Color = clBlue; } }
[解决办法]
- C/C++ code
void __fastcall TfrmMain::DBGrid_TestDrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumnEh *Column, TGridDrawState State){ if (Column->Index == 2) // 第三列 { ADOQ_Table->First(); for (int i = 0; i < ADOQ_Table->RecordCount; i++) { if (SameText(ADOQ_Test->FieldByName("a")->AsString, ADOQ_Table->FieldByName("a")->AsString)) { // 符合条件的格子字体颜色改变为蓝色 DBGrid_Test->Canvas->Font->Color = clBlue; // 如果要改变格子背景,用这个: // DBGrid_Test->Canvas->Brush->Color = clBlue; } ADOQ_Table->Next(); } } DBGrid_Test->DefaultDrawColumnCell(Rect, DataCol, Column, State);}