天天看點

Crystal Report建立圖表(4)

在上面的公式編輯器中,分為左中右三部分,左邊的是報表的字段,中間的是相關的功能函數,最右邊的是運算符,輕按兩下其中選中的部分,則可以添加到下部的公式顯示區域中。最後,儲存建立的公式。

     在程式中使用報表

     接下來,我們可以在程式中用代碼處理和報表的連接配接過程。首先,在工程項目中,增加如下的兩個命名空間的引用(注意,在代碼中也必須用using引入它們):

   CrystalDecisions.CrystalReports.Engine

   CrystalDecisions.Shared

   在viewreport.aspx的Page_load事件中,加入以下代碼

   //接收傳遞的參數

   nItemId = int.Parse(Request.QueryString.Get("ItemId"));

   strStartDate = Request.QueryString.Get("StartDate");

   strEndDate = Request.QueryString.Get("EndDate");

   //聲明報表的資料對象

   CrystalDecisions.CrystalReports.Engine.Database crDatabase; CrystalDecisions.CrystalReports.Engine.Table crTable;

   TableLogOnInfo dbConn = new TableLogOnInfo();

   // 建立報表對象opt

   ReportDocument oRpt = new ReportDocument();

   // 加載已經做好的報表

   oRpt.Load("F:/aspnet/WroxWeb/ItemReport.rpt");

   //連接配接資料庫,獲得相關的登陸資訊

   crDatabase = oRpt.Database;

   //定義一個arrtables對象數組

   object[] arrTables = new object[1];

   crDatabase.Tables.CopyTo(arrTables, 0);

   crTable = (CrystalDecisions.CrystalReports.Engine.Table)arrTables[0]; dbConn = crTable.LogOnInfo;

   //設定相關的登陸資料庫的資訊

   dbConn.ConnectionInfo.DatabaseName = "WroxSellers"; dbConn.ConnectionInfo.ServerName = "localhost";

   dbConn.ConnectionInfo.UserID = "sa";

   dbConn.ConnectionInfo.Password = "test";

   //将登陸的資訊應用于crtable表對象

   crTable.ApplyLogOnInfo(dbConn);

   //将報表和報表浏覽控件綁定

   crViewer.ReportSource = oRpt;

   //傳遞參數

   setReportParameters();

     在上面的代碼中,首先接收了日期,貨品編号等參數,并執行個體化了Database, Table和 TableLogOnInfo 三個類,它們是用來在運作時,建立報表和資料庫的連接配接必需的。再使用

   oRpt.Load("F:/aspnet/WroxWeb/ItemReport.rpt");

     來裝載已經做好了的報表。

     在裝載完報表後,将資料庫中要使用的表複制到一個對象數組中去,并選擇對象數組中的第一個表元素,将其轉換為水晶報表的報表對象。接着,再設定LOGONINFO中的登陸資料庫的資訊。最後,将報表源與報表浏覽控件綁定。

     傳遞參數到水晶報表

     定義一個新的過程,setReportParameters(),代碼如下:

   private void setReportParameters()

   {

   // all the parameter fields will be added to this collection

   ParameterFields paramFields = new ParameterFields();

   // the parameter fields to be sent to the report

   ParameterField pfItemId = new ParameterField();

   ParameterField pfStartDate = new ParameterField();

   ParameterField pfEndDate = new ParameterField();

   // 設定在報表中,将要接受的參數字段的名稱

   pfItemId.ParameterFieldName = "ItemId";

   pfStartDate.ParameterFieldName = "StartDate";

   pfEndDate.ParameterFieldName = "EndDate";

   ParameterDiscreteValue dcItemId = new ParameterDiscreteValue();

   ParameterDiscreteValue dcStartDate = new ParameterDiscreteValue(); ParameterDiscreteValue dcEndDate = new ParameterDiscreteValue();

   dcItemId.Value = nItemId;

   dcStartDate.Value = DateTime.Parse(strStartDate);

   dcEndDate.Value = DateTime.Parse(strEndDate);

   pfItemId.CurrentValues.Add(dcItemId);

   pfStartDate.CurrentValues.Add(dcStartDate); pfEndDate.CurrentValues.Add(dcEndDate);

   paramFields.Add(pfItemId);

   paramFields.Add(pfStartDate);

   paramFields.Add(pfEndDate);

   // 将參數集合綁定到報表浏覽控件

   crViewer.ParameterFieldInfo = paramFields;

   }

     現在來解釋一下上面的代碼。在水晶報表中,浏覽器控件有一個屬性parameterfieldsinfo,該屬性可以通過綁定parameterfields類型的集合,将相關的參數的實際數值傳遞到報表。Parameterfields類型集合通過add的方法,接收Parameterfield類型的對象。是以,我們先為itemid,startdate,enddate三個參數建立parameterfield類型的對象,并且設定它們對應報表中接受參數的名稱:

   ParameterFields paramFields = new ParameterFields();

   ParameterField pfItemId = new ParameterField();

   ParameterField pfStartDate = new ParameterField();

   ParameterField pfEndDate = new ParameterField();

   // 設定在報表中,将要接受的參數字段的名稱

   pfItemId.ParameterFieldName = "ItemId";

   pfStartDate.ParameterFieldName = "StartDate";

   pfEndDate.ParameterFieldName = "EndDate";

     接着,可以為這些參數字段設定具體的值了,但由于parameterfield必須接受P arameterDiscreteValue類型的對象,是以,再建立相關的執行個體:

   ParameterDiscreteValue dcItemId = new ParameterDiscreteValue();

   ParameterDiscreteValue dcStartDate = new ParameterDiscreteValue();

   ParameterDiscreteValue dcEndDate = new ParameterDiscreteValue();

   dcItemId.Value = nItemId;

   dcStartDate.Value = DateTime.Parse(strStartDate);

   dcEndDate.Value = DateTime.Parse(strEndDate);

     最後,就可以在三個parameterfield的對象中的currentvalues中設定它們的值,并往paramFields集合中加進這三個parameterfield對象。

     運作的結果如下。

Crystal Report建立圖表(4)