本文为解http://topic.csdn.net/u/20100808/15/64b63191-d751-4061-8918-498493085839.html所作。
在项目中点右键添加新项,选择数据集xsd,进入数据集设计界面,新建两个DataTable,如图示
打开rpt设计界面,在字段资源管理器中右击数据库字段,进入“数据库专家”界面,
在 项目数据->ADO.NET数据集下会出现刚新建的数据集及数据表,把它“拉”到右边的“选定的表”中,然后在左上角切换到“链接”标签页,如图示
最后点右下角的确定按钮,此时我们会发现“数据库字段”下多出两个表(Dictionary和TableA)
接下来我们按DICTNAME分组,在报表空白处点右键->插入->组,在下拉框中选择"Dictionary.DICTNAME"
然后我们插入最最重要的子报表,同样在报表空白处点右键->插入->子报表,把它放在“组头”那一节,如图示继续操作:
右击子报表对象,选择更改子报表链接,操作如下
我们对子报表对象进行格式化一下,右击子报表对象,设置对象格式,如图示
然后我们在插入一个汇总,同样右击报表空白处->插入->汇总,操作如下
之后我们要对数据进行过滤,因为数据源头的数据是没有进行过滤的,方法依旧是在报表空白处点右键->报表->选择专家,在弹出的界面里点击“显示公式>>>”按钮,设置过滤条件,如图示
至此,主报表界面设计完毕,最后的设计界面应该是这样的(看起来也蛮单调的:)就一个子报表对象和一个汇总字段);
主报表设计完,还要设计子报表,右击子报表对象->编辑子报表,此时我们会发现和刚刚设计的主报表界面一样,这是正常的,因为我们刚才选的正是主报表的设计模板,我们把不需要的东西去掉,只留下组名和汇总字段,其余节也全部抑制显示,最后的子报表界面应该是这样的
在子报表右击公式字段,新建一公式,取名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;
最终运行效果如下
布局方面可以自己慢慢调整。。
呼(~ o ~)~zZ