水晶报表 分类统计之子报表法

本文为解http://topic.csdn.net/u/20100808/15/64b63191-d751-4061-8918-498493085839.html所作。

 

在项目中点右键添加新项,选择数据集xsd,进入数据集设计界面,新建两个DataTable,如图示

水晶报表 分类统计之子报表法_第1张图片

打开rpt设计界面,在字段资源管理器中右击数据库字段,进入“数据库专家”界面,
在 项目数据->ADO.NET数据集下会出现刚新建的数据集及数据表,把它“拉”到右边的“选定的表”中,然后在左上角切换到“链接”标签页,如图示

最后点右下角的确定按钮,此时我们会发现“数据库字段”下多出两个表(Dictionary和TableA)

接下来我们按DICTNAME分组,在报表空白处点右键->插入->组,在下拉框中选择"Dictionary.DICTNAME"

 

然后我们插入最最重要的子报表,同样在报表空白处点右键->插入->子报表,把它放在“组头”那一节,如图示继续操作:

水晶报表 分类统计之子报表法_第2张图片

右击子报表对象,选择更改子报表链接,操作如下

水晶报表 分类统计之子报表法_第3张图片

我们对子报表对象进行格式化一下,右击子报表对象,设置对象格式,如图示


然后我们在插入一个汇总,同样右击报表空白处->插入->汇总,操作如下

之后我们要对数据进行过滤,因为数据源头的数据是没有进行过滤的,方法依旧是在报表空白处点右键->报表->选择专家,在弹出的界面里点击“显示公式>>>”按钮,设置过滤条件,如图示

水晶报表 分类统计之子报表法_第4张图片

至此,主报表界面设计完毕,最后的设计界面应该是这样的(看起来也蛮单调的:)就一个子报表对象和一个汇总字段);

水晶报表 分类统计之子报表法_第5张图片

主报表设计完,还要设计子报表,右击子报表对象->编辑子报表,此时我们会发现和刚刚设计的主报表界面一样,这是正常的,因为我们刚才选的正是主报表的设计模板,我们把不需要的东西去掉,只留下组名和汇总字段,其余节也全部抑制显示,最后的子报表界面应该是这样的

水晶报表 分类统计之子报表法_第6张图片

在子报表右击公式字段,新建一公式,取名Condition,进入公式编辑器,编辑如下:
if {?Pm-Dictionary.DICTNAME} = '技术类' then
'10051001'
else if {?Pm-Dictionary.DICTNAME} = '产品类' then
'10051002'

公式编辑完后要记得点击左上角的“保存并关闭”按钮

同样我们要对子报表数据进行过滤,方法同主报表一样,只是过滤条件不一样,如图示

这样我们设计部分就到此,最后进入代码部分

string ConnString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Users/Administrator/Desktop/Database1.mdb"; //我这边以Access数据库进行测试,其他数据库同理 OleDbConnection conn = new OleDbConnection(ConnString); string strSQL = "select DISTINCT DICTNO,DICTNAME,COLNAME from (select DICTNAME,DICTNO,a.COLNAME from dictionary a union all select a.DICTNAME,b.DICTNO,a.COLNAME from dictionary a inner join dictionary b on a.DICTNO=b.COLNAME union all select a.DICTNAME,c.DICTNO,a.COLNAME from (dictionary a inner join dictionary b on a.DICTNO=b.COLNAME) inner join dictionary c on b.DICTNO=c.COLNAME) t1 left join TableA t2 on t1.DICTNO=t2.science"; OleDbDataAdapter da = new OleDbDataAdapter(strSQL, conn); DataSet1 ds = new DataSet1(); da.Fill(ds.Dictionary); //填充到数据集DataSet1的Dictionary表 strSQL = "select * from TableA"; da = new OleDbDataAdapter(strSQL, conn); da.Fill(ds.TableA); //填充到数据集DataSet1的TableA表 CrystalReport1 myReport = new CrystalReport1(); myReport.SetDataSource(ds); //为报表设置数据源 crystalReportViewer1.ReportSource = myReport;

最终运行效果如下

水晶报表 分类统计之子报表法_第7张图片

 

 

水晶报表 分类统计之子报表法_第8张图片

 

布局方面可以自己慢慢调整。。

 

呼(~ o ~)~zZ

你可能感兴趣的:(JOIN,数据库,String,报表,Dictionary,dataset)