紧急求救!!如何给DBGrid的行画不同的颜色(根据某一个字段的值)

558047 2003-08-21 10:40:54
根据某一个字段的值,如何给DBGrid的行画上不同的颜色?
...全文
87 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
558047 2003-08-21
  • 打赏
  • 举报
回复
不是要字体变颜色,而是要行的背景变色
lvjack 2003-08-21
  • 打赏
  • 举报
回复
请教dbgrid的行颜色控制的问题
主要解答者: Libran 提交人: seehere
感谢: wx_zfjacky、Libran、szbug
审核者: xpyilin 论坛对应贴子: 查看
A :

我的dbgrid是这样的

施工号 工序1 工序2 …… 工序20 完成的工序数目
4-56 车30 钻5 …… 2

对每一行记录进行颜色控制,假如该行完成的工序数目是1,则该行
只有工序1的字体变为红色;假如该行完成的工序数目是2,则该行
工序1和工序2的字体变为红色;依次类推。

请问怎么用程序实现阿(DrawCollumCell函数中写)
---------------------------------------------------------------

void __fastcall TForm1::DBGrid1DrawDataCell(TObject *Sender,
const TRect &Rect, TField *Field, TGridDrawState State)
{
int Count;
Count=Table1->FieldByName("完成的工序数目")->AsData;
if (int i=0;i<Count;i++)
{
DBGrid1->Fields->FieldNo=i;
DBGrid1->Canvas->Font->Color = clRed;
}
DBGrid1->DefaultDrawDataCell(Rect, Field, State);

}
---------------------------------------------------------------

假设字段"工序1"在DataSet的Fields中的Index值为fIndex:
void __fastcall TForm1::DBGrid1DrawDataCell(TObject *Sender,
const TRect &Rect, TField *Field, TGridDrawState State)
{
TDBGrid *dbgrid = ((TDBGrid *)Sender);
TDataSet *dataset = dbgrid->DataSource->DataSet;
static int count = 0;
if (Column->Index == 0)
count = dataset->FieldByName("完成的工序数目")->AsInteger;
if (Column->Field->Index >= fIndex &&
Column->Field->Index < fIndex + count)
dbgrid->Canvas->Font->Color = clRed;
else dbgrid->Canvas->Font->Color = clBlack;
dbgrid->DefaultDrawDataCell(Rect, Field, State);
}

---------------------------------------------------------------

试试这个。。。
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
if (((TDBGrid*)Sender)->DataSource->DataSet->Fields->Fields[0]->AsString.SubString(1, 1) == "A")
{
((TDBGrid*)Sender)->Canvas->Brush->Color=clRed;
}
else
{
((TDBGrid*)Sender)->Canvas->Brush->Color=clBlue;
}
((TDBGrid*)Sender)->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}

558047 2003-08-21
  • 打赏
  • 举报
回复
但是具体怎么写语句?
yeking 2003-08-21
  • 打赏
  • 举报
回复
调用
DBGrid1DrawColumnCell事件
Santos 2003-08-21
  • 打赏
  • 举报
回复
来晚了,同意楼上
xuby5228 2003-08-21
  • 打赏
  • 举报
回复
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
if (((TDBGrid*)Sender)->DataSource->DataSet->Fields->Fields[0]->AsString.SubString(1, 1) == "A")
{
((TDBGrid*)Sender)->Canvas->Brush->Color=clRed;
}
else
{
((TDBGrid*)Sender)->Canvas->Brush->Color=clBlue;
}
((TDBGrid*)Sender)->DefaultDrawColumnCell(Rect, DataCol, Column, State);
}

不就是行的背景变色吗?

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧