|
发表于 2007-6-15 13:43:51
|
显示全部楼层
哦,不知道 ccjava 的例子做的怎样了
我现在用透视数据集和数据网格来做的
首先,
1、建一个透视数据集,设置,商品名称和商品编码为行维,仓库为列维,数量和金额为项。并选中列小计
2、根据这个透视数据集创建一个数据网格
3、选中数据网格的 ShowBands 和 ShowRowNumber 属性, 并取消 ShowIndicator 属性
4、在数据集的 AfterOpen 事件中,取动态创建bands,设置bands的caption,并控制透视数据集列维转制成字段的显示名称
根据 DataSetBrokerTSSJJ1.DataSet.FieldCount 创建bands,因为bands是字段的一半,
根据 DataSetBrokerTSSJJ1.DataSet.FieldCount 循环设置colunm 属于哪个bands
根据 TSQLDataSet(DataSetBrokerTSSJJ1.DataSet).BizFields.DisplayName 显示名称中是否有'_'这个,修改字段的显示名称
代码参考如下:
var
i,ii: integer;
s:String;
begin
ii:= 0;
for i:=0 to ((DataSetBrokerTSSJJ1.DataSet.FieldCount div 2)-1) do
begin
s:= TSQLDataSet(DataSetBrokerTSSJJ1.DataSet).BizFields[ii].DisplayName;
if i<>0 then
DataGrid.Bands.Add;
if StringUtils.Pos('_',s)=0 then
DataGrid.Bands.Items.Caption := '商品信息'
else if StringUtils.Pos('*',s)=0 then
DataGrid.Bands.Items.Caption := StrUtils.leftStr(TSQLDataSet(DataSetBrokerTSSJJ1.DataSet).BizFields[ii].DisplayName,6)
else
DataGrid.Bands.Items.Caption := '合计';
ii:=ii+2;
end;
ii:=0;
for i:=0 to DataGrid.ColumnCount-1 do
begin
if (Trunc(i/2)<>0) then
if (i mod 2 =0) then
ii:=ii+1;
DataGrid.Columns.BandIndex := ii;
end;
for i:=0 to DataGrid.ColumnCount-1 do
begin
s:= TSQLDataSet(DataSetBrokerTSSJJ1.DataSet).BizFields.DisplayName;
if StringUtils.Pos('_',s)>0 then
TSQLDataSet(DataSetBrokerTSSJJ1.DataSet).BizFields.DisplayName:= StrUtils.rightStr(s,4)
end;
end;
效果图,见附件,现在还剩下最后一行的汇总了,
有两种方法,
一是增加这样一条记录出来,然后去掉列头的排序,
二是代码来创建页脚汇总,这样就需要在第三步选中 ShowSummaryFooter 属性
这些请楼主自己研究研究,设置页脚汇总可以参考这个帖子,然后写相应的代码
http://bbs.justep.com/forum.php?mod=viewthread&tid=1229
|
|