首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

数据库中相干DBGrid中数据的显示(应该是很简单的操作。)

2013-01-04 
数据库中有关DBGrid中数据的显示(应该是很简单的操作。。)如果想要让数据库的DBGrid中的某个字段里的数据,当

数据库中有关DBGrid中数据的显示(应该是很简单的操作。。)
如果想要让数据库的DBGrid中的某个字段里的数据,当这个数据满足某个条件(比如学号大于001611)时,使满足条件的数据背景变成红色,这应该怎么做呢?
AnsiString number=Table1->FieldByName("Species No")->Value;
 if(number==90020)
 DBGrid1->Columns->Items[0]->Color=clRed;
这个是我写的一个代码,是想要让字段“species No”中数值等于90020的那个数据变成红色,但是这样做了之后却使整个字段的数据都变成红色了,不知道是不是最后一句这样写不对还是怎么。。教教我吧!
[解决办法]
你可在 DBGrid 元件的 DrawDataCell 事件中, 依资料的条件性来改变格子或文字的
颜色.

如 :

OnDrawDataCell(...)
begin
with TDBGrid(Sender) do
begin
if (条件) then
Canvas.TextOut(Rect.Left + 4, Rect.Top + 2, 要显示的文字, 如表格的资料);
end;

而你会看到 DBGrid 的显示资料怎麽有重叠的情况, 那是因为原本DBGrid
要显示的资料与 TextOut 所显示的资料重叠, 解决方法 :

在 Query 元件所加入的栏位(在元件上按右键, 会有 Add Fields...的选单), 在
不要显示资料的栏位的 OnGetText 事件中有一参数设定为 False;

procedure TForm1.Query1Detail1GetText(Sender: TField; var Text: string; 
DisplayText: Boolean);
begin
// 决定在 DBGrid 得知表格资料时, 要不要显示所得到的资料, False -> 不显示
// 就可避免与 TextOut 的文字重叠了
DisplayText : = False;
end;

end;



如果用 Delphi 3 处理很简单.

例如,对表中某字段当其数值小于0时为红字,其他为黑字.
在 DBGrid.OnDrawColumnCell(...) 中:
begin
if TableField.AsInteger < 0 then
DBGrid.Canvas.Font.Color := clRed
else
DBGrid.Canvas.Font.Color := clBlack;

DBGrid.DefaultDrawColumnCell(...);
end;

这样,对 Field 指定的格式仍旧生效,不必重写.

热点排行