DBGrid分组显示?

li_zhifu 2004-07-21 02:36:44
表内容:
shebeibh shebeimc ...
910100101 AAAAAAA
910100102 AAAAAAB
910100103 AAABBBB
910100201 CCCCCCC
910100301 DDDDDDD
910100302 CDCDCDD
...

现在的问题是:要根据shebeibh的前七位是否相同而改变整行的颜色,即
910100101 AAAAAAA
910100102 AAAAAAB
910100103 AAABBBB
这三行是一种颜色
910100201 CCCCCCC
是另一种颜色
910100301 DDDDDDD
910100302 CDCDCDD
又恢复为第一种颜色
显示已经order by shebeibh 了
...全文
258 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
metro 2004-07-21
var bh :array of string;
i:integer;
count:integer;
color: array of Tcolor;
第一步。先把不同的shebeibh查找出来。
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('select distinct shebeibh from table');
adoquery1.open;
count:=adoquery1.recordcount;//记录数;
adoquery1.first;
while not adoquery1.eof do
begin
bh[i]:=copy(adoquery1['shebeibh'],1,7); //保存不同的编号的前七位;
adoquery1.next;
end;
第二步在
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);里写代码判断:
var i:integer;
begin
for i:=0 to count do //每一个i值代表一种颜色;
if copy(datasource1.DataSet.FieldByName('shebeibh').Asstring,1,7)=bh[i]
//判断前七位是否相同
then
begin
dbgrid1.Canvas.Brush.Color:=color[i]
dbgrid1.Canvas.Brush.Color:=color[i];
DBGrid1.Canvas.FillRect(Rect);
dbgrid1.Canvas.Font.Color:=Clred;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
end;
end;
  • 打赏
  • 举报
回复
aiirii 2004-07-21
>>现在的问题是:要根据shebeibh的前七位是否相同而改变整行的颜色,即

看我給你的, 很簡單就可實現的
  • 打赏
  • 举报
回复
aiirii 2004-07-21
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4091

DBGrid 应用全书(全面修订正在进行时)
  • 打赏
  • 举报
回复
jacket008 2004-07-21
var
AYellowStyle: TcxStyle;
ARedStyle:TcxStyle;
prvrecord:integer=0;//保存上一记录shebeibh的前7位值
chcorlor:integer=0;//变色

procedure TForm1.FormCreate(Sender: TObject);
begin
//行颜色
AYellowStyle := TcxStyle.Create(Self);
AYellowStyle.Color := $0080FFFF;
AYellowStyle.TextColor := clMaroon;
//行颜色
ARedStyle := TcxStyle.Create(Self);
ARedStyle.Color := $000000FB;
ARedStyle.TextColor := clMaroon;
end;

procedure TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
if strtoint(Copy(ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index],1,7))>prvrecord then
begin
chcorlor:=chcorlor+1;
if (chcorlor mod 2)=0 then
AStyle := AYellowStyle
else
AStyle := ARedStyle;

prvrecord:=strtoint(Copy(ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index],1,7));
end
else
begin
if (chcorlor mod 2)=0 then
AStyle := AYellowStyle
else
AStyle := ARedStyle;
end;
end;



以上是从别人做的CxGrid变色例子稍作修改,没有调试,出错不要见怪
  • 打赏
  • 举报
回复
发帖
数据库相关
加入

2470

社区成员

Delphi 数据库相关
社区管理员
  • 数据库相关社区
申请成为版主
帖子事件
创建了帖子
2004-07-21 02:36
社区公告
暂无公告