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 了
...全文
282 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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变色例子稍作修改,没有调试,出错不要见怪

2,507

社区成员

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

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