问题2、如何定制DBGrid组件中的某一字段和记录显示?(高分200求教)(200分)

  • 主题发起人 主题发起人 xkonline
  • 开始时间 开始时间
X

xkonline

Unregistered / Unconfirmed
GUEST, unregistred user!
在DBGrid中,某一单独字段需采用一种特殊字体显示,而其它字段
还用另外一种字体,在程序中应如何实现?
另外还希望在DBGrid中显示记录时,能像在Excel中显示行时,一
行底色为;蓝色一行底色为为白色的交替显示,从而使效果更加醒
目,应如何实现。
由于小弟只是一只非常菜的新手,还请大富翁们讲解详细一些,并
附源代码。
 
http://www.51delphi.com 要登陆 user:zhaohai9 pass:fengliu
dxgrid 很酷的。有demo
 
双击DBGrid中添加列,可以给列的属性font中设置字体!
 
程序里可以在OnDrawColumnCell事件中设置Column的font属性。
在DBgrid的属性options中设置dgRowselect为True可以有篮色选择一行
 
[blue]对不起,我来晚了[/blue]
[red]zhaohai9[/red]您好,我去了DELPHI窑洞,但没有找到您所说的dxgrid,还请您说详细一些。
[purple]zhoujg[/purple]您好,您所回答的有关font的问题正确,但关于记录篮白交替显示的问题可能
理解我所说的意思,我想像在Excel中显示行时,一行为白底蓝字,一行为蓝白底白字
,交替显示;类似于斑马线一样的效果,从而使效果更加醒目,请各位帮忙。
 
zhaohai9是要你下载expressquantumgrid这个控件包,几十兆吧。
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Field = Table1Name then //name TField;
DBGrid1.Canvas.Font.Color := Clred
else
DBGrid1.Canvas.Font.Color := ClGreen;
DBGrid1.Canvas.TextRect(Rect,Rect.left,Rect.Top,Column.Field.AsString);
if gdFocused in State then
DBGrid1.Canvas.DrawFocusRect(Rect);
end;
 
几十兆的控制包就算了吧,看来还是老老实实自己动手,丰衣足食吧,不过还还要谢谢zhaohai9。一般情况下,我不想用外来控件,
你们呢?
Table1Name的值是什么?赋给Column.Field又是什么意思?请再详细讲解下。我没看懂,所以
一编译就出错,弄得我也不知怎么改......请帮我这一段再看看。
 
在DBGrid中,某一单独字段需采用一种特殊字体显示,而其它字段
还用另外一种字体,在程序中应如何实现?
设置colums的font属性可以做到:如DBGrid1.colums[0].font:='宋体'; 可以使第1列都为宋体。


另外还希望在DBGrid中显示记录时,能像在Excel中显示行时,一
行底色为;蓝色一行底色为为白色的交替显示,从而使效果更加醒
目,应如何实现。
if DBGrid1.DataSource.DataSet.RecNo mod 2=0 then //如果为奇数列蓝底,偶数列白底
begin
DBGrid1.Canvas.Brush.Color :=clWhite ;
DBGrid1.Canvas.FillRect(Rect);
end
else
begin
DBGrid1.Canvas.Brush.Color :=clBlue ;
DBGrid1.Canvas.FillRect(Rect);
end;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
 
呵呵,不好意思,刚刚那个有点小bug,用这个试试:
奇数列蓝底,偶数列白底,选中为红底
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if DBGrid1.DataSource.DataSet.RecNo mod 2=0 then
begin

DBGrid1.Canvas.Brush.Color :=clWhite ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.Font.Color :=clBlack;
end
else
begin
DBGrid1.Canvas.Brush.Color :=clBlue ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.Font.Color :=clBlack;
end;
if gdSelected in State then
begin
DBGrid1.Canvas.Brush.Color :=clRed ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.Font.Color :=clBlack;
end;

DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
 
pp虫:
 这段程序写得很好,在我的程序中也编译通过了,为什么运行时就是没有效果呢?
还是和以前一样,DBgrid中显示一片白。
 请再指点一下。
 
以前写的,你放到DBGrid1DrawColumnCell事件中试试
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
if (ADOTable1->FieldByName("name")->AsString=="dd" )
if( Column->FieldName=="title"||Column->FieldName=="name")
DBGrid1->Canvas->Font->Color = clRed;
else
DBGrid1->Canvas->Font->Color = clGreen;
else
DBGrid1->Canvas->Font->Color = clBlue;
DBGrid1->DefaultDrawColumnCell(Rect,DataCol, Column, State);

}
 
快救救我,为什么还是不行?
 
论坛里到底还有没有人在,谁能告诉我PP虫的代码在我的程序里怎么不管用?
 
谁能告诉我PP虫的代码在我的程序里怎么不管用?
 
刚才试了,pp虫的程序可以啊。
 
pp虫的程序可以工作!
可能你的表格如果没有datasource 或没有打开,或加入 永久 字段列, 也可能数据集不支持
^^^^
DataSet.RecNo(如 DIAMONDACCESS)。

 
同意pp虫的做法!
 
我的表格中的datasource 是打开的,PP虫的代码为什么还是没有起作用。
 
1、你的DbGrid现在显示数据吗?
2、与DateSource相连的数据集控件打开了吗?
 
后退
顶部