读书人

怎么改变DBGRID某些特定的单元格的背景

发布时间: 2012-03-11 18:15:38 作者: rapoo

如何改变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);} 

读书人网 >C++ Builder

热点推荐