天天看点

asp.net 水晶报表使用总结

手头上的一个项目,终显雏形,其中遇到一些问题,经过多番努力,终于得以解决,主要是水晶报表方面的。因为是第一次用,总结的同时,也给后来可能用到水晶报表的人一些微弱的指引,所以如果总结的不好的话,请大家指正。

关于水晶报表的一些基本概念,如push和pull模式等如果想了解的话,自己百度搜索下,或是找本书看就可以了。

这里我主要是根据实际应用到的要求,来进行带图的详细介绍,希望对新手有所帮助。

使用的是VS2008,在页面中添加命名空间的引用,主要有以下几个:

using CrystalDecisions.CrystalReports.Engine;

using CrystalDecisions.ReportSource;

using CrystalDecisions.Shared;

下面先来看下,利用水晶报表做出来的效果图,只是实现功能,界面未经过美工处理,有点难看,多多包涵.

asp.net 水晶报表使用总结

                                                                  图一

asp.net 水晶报表使用总结

     图二

由于是统计报表,所以在应用中需要传递参数值,在实际应用中,我是利用了存储过程来实现的。

Create proc PrintCJ

 @cjbh varchar(50)

As

SELECT  Cjdy_zb.DWMC, Cjdy_zb.ND,Cjdy_zb.JD, Cjdy_zb.QSDD, Cjdy_zb.JFJZRQ, Cjdy_zb.YJQJS, Cjdy_zb.YJQJZ, Cjdy_zb.SKDW, Cjdy_fb.QSSY, Cjdy_fb.YT, Cjdy_fb.DYGY,

Cjdy_fb.DEGY, Cjdy_fb.DSGY, Cjdy_fb.BCHJ FROM Cjdy_fb INNER JOIN Cjdy_zb ON Cjdy_fb.CJBH = Cjdy_zb.CJBH and Cjdy_zb.CJBH= @cjbh;

GO

下面截图截图一步一步来操作实现:

(1)、在项目中添加一个新文件夹,如Report文件夹,然后在该目录下右键添加Crystal报表。

asp.net 水晶报表使用总结

接下来,选择“作为空白模板”,点击“确定”。

asp.net 水晶报表使用总结

右键数据库字段,选择“数据库专家”

asp.net 水晶报表使用总结
asp.net 水晶报表使用总结

展开“创建新连接”,选择“OLE DB(ADO)”,在弹出框中选择“Microsoft OLE DB Provider for SQL Server”。

asp.net 水晶报表使用总结

点击“下一步”,弹出连接信息,按照实际情况,填写内容。

asp.net 水晶报表使用总结

点击“下一步”。

asp.net 水晶报表使用总结

点击“完成”,这样一个连接就配置成功了。

asp.net 水晶报表使用总结
asp.net 水晶报表使用总结

在上面的界面中,展开数据库,选择“存储过程”PrintCJ,既上面创建的存储过程,并将其添加到右边。

asp.net 水晶报表使用总结

在输入参数值中将“设为空值”复选框反勾选,让其成为一个离散值。

asp.net 水晶报表使用总结

点击“确定”。

点击“确定”,在字段资源管理器中可以看到如下信息。

asp.net 水晶报表使用总结

接下来就是在水晶报表的主体中根据需要,定制报表界面了。如下:

asp.net 水晶报表使用总结

这些字段都是可以从“字段资源管理器”中直接拖拽过来直接使用的,这其中也可以通过插入图片为其添加背景。

从查询页面将参数传递给上面的报表页面,报表页面通过传递的参数,动态的显示报表。

比如查询页面查询出结果后,通过一个按钮将参数传递给报表页面:

Page.RegisterStartupScript("reopen",String.Format("<script> window.open('Print2.aspx?cjbh={0}', '_blank','height=574,width=1014,top=20,left=10,resizable=yes,status=yes,toolbar=no,menubar=yes,location=no,location=no,directories=no,copyhistory=no') </script>", Server.UrlEncode(ViewState["cjbh"].ToString().Trim())));

在报表页面的Page_Load事件中通过接收参数,并取数据绑定到Crystal报表中去。

protected void Page_Load(object sender, EventArgs e)

    {

        CrystalDecisions.Shared.ParameterValues pvs = new CrystalDecisions.Shared.ParameterValues();

        CrystalDecisions.Shared.ParameterDiscreteValue pvuid = new CrystalDecisions.Shared.ParameterDiscreteValue();

        CrystalDecisions.CrystalReports.Engine.ReportDocument rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();

        string rptPath = Server.MapPath("../Report/CrystalReport4.rpt");

        rpt.Load(rptPath);

        pvuid.Value = Server.UrlDecode(Request.QueryString["cjbh"]);

        pvs.Add(pvuid);

       //这里的字段名称就是

       rpt.DataDefinition.ParameterFields["@cjbh"].ApplyCurrentValues(pvs);

        CrystalDecisions.Shared.TableLogOnInfo logOnInfo = new CrystalDecisions.Shared.TableLogOnInfo();

        logOnInfo.ConnectionInfo.DatabaseName = "数据库名称";

        logOnInfo.ConnectionInfo.ServerName = ConfigurationSettings.AppSettings["server"]; //数据库服务器名称

        logOnInfo.ConnectionInfo.UserID = "sa";

        logOnInfo.ConnectionInfo.Password = "******";

        rpt.Database.Tables["PrintCJ;1"].ApplyLogOnInfo(logOnInfo);//存储过程在报表中的名称

        CrystalReportViewer1.ReportSource = rpt;

}

运行程序,就可以出如图二的结果了。

以下介绍传递二个参数,带汇总功能的报表效果,如图一那样。

方法跟前面很类似,先是根据实际情况,写好存储过程:

Create proc NYGGBB

       @startTime datetime,

       @endTime datetime

       begin

SELECT YSXZDYMC, GSL, GDZC, NZWZZMJ, QSDJ, RKSL, PJGZ, ZJJE FROM Xxz_nyggys where JFRQ>=@startTime and JFRQ<=@endTime

     end

设计好报表页面

asp.net 水晶报表使用总结

关于需要统计的字段,其实很简单,你只要在需要统计的字段上右键,选择“插入”->“汇总”,然后将汇总字段拖至下方即可。

查询页面将参数传递至统计页面:

Page.RegisterStartupScript("reopen",String.Format("<script> window.open('Print.aspx?sTime={0}&eTime={1}', '_blank','height=574,width=1014,top=20,left=10,resizable=yes,status=yes,toolbar=no,menubar=yes,location=no,location=no,directories=no,copyhistory=no') </script>", Server.UrlEncode(dt1.ToString().Trim()), Server.UrlEncode(dt2.ToString().Trim())));

统计页面获取传递参数,并进行统计:

{

        //传递两个参数,需要创建两个ParameterValues对象

        CrystalDecisions.Shared.ParameterValues pvs2 = new CrystalDecisions.Shared.ParameterValues();

        CrystalDecisions.Shared.ParameterDiscreteValue pvuid2 = new CrystalDecisions.Shared.ParameterDiscreteValue();

        string rptPath = Server.MapPath("../Report/CrystalReport3.rpt");

        pvuid.Value = Server.UrlDecode(Request.QueryString["sTime"]);  //起始时间

        pvuid2.Value = Server.UrlDecode(Request.QueryString["eTime"]); //结束时间

        pvs2.Add(pvuid2);

        rpt.DataDefinition.ParameterFields["startTime"].ApplyCurrentValues(pvs);

        rpt.DataDefinition.ParameterFields["endTime"].ApplyCurrentValues(pvs2);

        logOnInfo.ConnectionInfo.DatabaseName = "数据库名称";

        logOnInfo.ConnectionInfo.ServerName = ConfigurationSettings.AppSettings["server"];

        logOnInfo.ConnectionInfo.Password = "****";

        rpt.Database.Tables["CZGSBB;1"].ApplyLogOnInfo(logOnInfo);// 存储过程在报表中的名称

运行后,效果如图一所示。

友情提示:

1、在使用自带的水晶报表时,请注册,否则只能使用30次 

   水晶报表注册码

       注册号:6707437608 

       密码:AAP5GKS0000GDE100DS