天天看點

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