5
5rain6sky
Unregistered / Unconfirmed
GUEST, unregistred user!
to terra:
我上面说的就是网格的实现呀,你应该注意到我提到了“调整格线”的问题,
如果只是单纯的数据导入就不用OnNeedData事件了,不过怪我说得不够详细,再来——
对于数据,我的意思是先用SQL把你的数据集组织成这样的形式:
X art class1 class1 * * *
X art class2 class2 * * *
X math class3 class3 * * *
X math class4 class4 * * *
Y A B B1 * * *
Y A B B2 * * *
Y C D D * * *
即按第一、二、三、四列分组并排序,上面的这个样式也是你简单地利用QuickReport的DataSet
关联之后必然得到的结果。现在要对之进行改造的地方就是每一个分组项的内容(如X、class1等)只显示一次,
以及分组项对应的格线只在整个分组项的“大”边框处出现。为此必须是至少分组项的每一格都要用一个TQRShape
当然它的形状就是一个矩形。因为想必你也注意到了,当这个QRShape的高度比DetailBand的高度大的时候,
它的底部的那条横线是不会显示出来的,利用这一点就可以做到在分组没有显示完的时候避免被横线隔断,同时
可以保留两边的竖线连续显示;而当分组显示完了的时候再把QRShape的高度减到和DetailBand一样,就完成了
大边框的绘制。所以我说这是“QRShape的高度加1减1的事”。不过我少说了一点,就是分组项内容本身的显示,
也是同样的方法:当分组内容改变的时候只显示一次,其它时候不让它显示就行了。而这一点只是代表分组项的
控件的Visible属性的True和False的调整问题。横向的格线的调整也是一样的。
因此最关键的就是数据的组织,这样才能掌握住恰当的时机供程序去做适当的调整。
我上面说的就是网格的实现呀,你应该注意到我提到了“调整格线”的问题,
如果只是单纯的数据导入就不用OnNeedData事件了,不过怪我说得不够详细,再来——
对于数据,我的意思是先用SQL把你的数据集组织成这样的形式:
X art class1 class1 * * *
X art class2 class2 * * *
X math class3 class3 * * *
X math class4 class4 * * *
Y A B B1 * * *
Y A B B2 * * *
Y C D D * * *
即按第一、二、三、四列分组并排序,上面的这个样式也是你简单地利用QuickReport的DataSet
关联之后必然得到的结果。现在要对之进行改造的地方就是每一个分组项的内容(如X、class1等)只显示一次,
以及分组项对应的格线只在整个分组项的“大”边框处出现。为此必须是至少分组项的每一格都要用一个TQRShape
当然它的形状就是一个矩形。因为想必你也注意到了,当这个QRShape的高度比DetailBand的高度大的时候,
它的底部的那条横线是不会显示出来的,利用这一点就可以做到在分组没有显示完的时候避免被横线隔断,同时
可以保留两边的竖线连续显示;而当分组显示完了的时候再把QRShape的高度减到和DetailBand一样,就完成了
大边框的绘制。所以我说这是“QRShape的高度加1减1的事”。不过我少说了一点,就是分组项内容本身的显示,
也是同样的方法:当分组内容改变的时候只显示一次,其它时候不让它显示就行了。而这一点只是代表分组项的
控件的Visible属性的True和False的调整问题。横向的格线的调整也是一样的。
因此最关键的就是数据的组织,这样才能掌握住恰当的时机供程序去做适当的调整。