起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 922|回复: 21

【结贴】自定义DataGrid分组列显示内容

[复制链接]
发表于 2010-3-15 11:25:07 | 显示全部楼层 |阅读模式
如下图分别是DataGrid数据源和实现自定义分组列显示内容的代码
图片,以及运行后的效果图,不知道在哪里出现错误了,请帮忙
看看怎么解决吧。

a.png

25.46 KB, 下载次数: 383

回复

使用道具 举报

 楼主| 发表于 2010-3-15 11:26:32 | 显示全部楼层
代码遍历的数据集代理控件

b.png

20.77 KB, 下载次数: 367

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-15 11:27:34 | 显示全部楼层
自定义分组列显示内容代码

c.png

21.79 KB, 下载次数: 371

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-15 11:28:41 | 显示全部楼层
运行效果图

d.png

44.02 KB, 下载次数: 361

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-15 11:37:34 | 显示全部楼层
全部代码

f.png

50.61 KB, 下载次数: 352

回复 支持 反对

使用道具 举报

发表于 2010-3-15 16:22:06 | 显示全部楼层
正在处理有结果马上跟贴告知
回复 支持 反对

使用道具 举报

发表于 2010-3-16 09:30:27 | 显示全部楼层
参考代码如下

procedure TMainForm.BizFormShow(Sender: TObject);
begin
    DataSetBroker2.DataSet.Open;
    DataSetBroker2.DataSet.First;
    DataSetBroker1.DataSet.Open;
    DataSetBroker1.DataSet.First;
end;

procedure TMainForm.DataGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TTreeListNode; AColumn: TTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean; var AText: string; var AColor: Integer; AFont: TFont; var AAlignment: TAlignment; var ADone: Boolean);
var
  lstr : String;
begin
  if ANode.HasChildren then
    begin
    lstr := StringUtils.Copy(AText, StringUtils.Pos(':', AText) + 2, 10);
    AText := Sysutils.IntToStr(DataSetBroker2.DataSet.recno)+': '+ StringUtils.Copy(AText, StringUtils.Pos(':', AText) + 2, 10);
    DataSetBroker2.DataSet.Next;
    end;
end;

procedure TMainForm.DataGrid1Click(Sender: TObject);
begin
  DataSetBroker2.DataSet.First;
end;

procedure TMainForm.DataGrid1Expanded(Sender: TObject; Node: TTreeListNode);
begin
  DataSetBroker2.DataSet.First;
end;

procedure TMainForm.DataGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    DataSetBroker2.DataSet.First;
end;

procedure TMainForm.DataGrid1Collapsed(Sender: TObject; Node: TTreeListNode);
begin
   DataSetBroker2.DataSet.First;
end;

DataSetBroker1 是分组的数据及,DataSetBroker2 是序号那个数据集,ZD2 是分组字段
DataSetBroker1 对应的数据集的SQL语句为
SELECT SJB1.ZD1, SJB1.ZD2, SJB1.SJ
  FROM SJB1
  ORDER BY SJB1.ZD2

DataSetBroker2 对应的数据集的SQL语句为
SELECT DISTINCT ZD2
  FROM SJB1

附件是运行的效果图

1.jpg

10.4 KB, 下载次数: 325

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-16 11:08:06 | 显示全部楼层
我这边是窗体上有一个DataSetBroker1控件和DataGrid中的DataSetBroker2控件代理的是
同一个数据集A,请问在窗体的OnShow事件打开A后,在DataGrid中还需要用DataSetBroker2
打开A吗,在哪里打开呢?现在出现问题是执行DataGrid的Expanded事件时系统提示A没有打开。
回复 支持 反对

使用道具 举报

发表于 2010-3-16 11:32:02 | 显示全部楼层
已经电话沟通,在DataSetBroker1 的open事件上open DataSetBroker2就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-16 11:43:45 | 显示全部楼层
DataGrid的Expanded事件在DataSetBroker1 的open事件之前执行了,所以系统还是报数据集
没有打开的错误,看来在只能在DataGrid的Expanded打开数据集了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-10 07:18 , Processed in 0.046935 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表