天天看點

c#水晶報表的進一步功能和使用

最近一直在學水晶報表,一些基礎知識覺得學了不少,可是還是覺得水晶報表的核心還沒有學會!可是是在自學的原因吧.沒有人指導,隻是自己埋着頭自己學,什麼地方學偏了也不知道。

  有一點一直認為自己的認識有偏差,就是我總是認為水晶報表很簡單,隻是能實作選擇顯示列印的功能。但是她到底能不能實作删改的功能呢?查了一些資料都沒有說!但是水晶報表不是都是說功能強大嗎!怎麼可能隻有這麼點功能呢?有點懷疑自己!有沒有水晶報表學的比較好,可否給點指導呢啊?

    下面是我收集的一些水晶報表的基礎資料:

晶報表是一個功能強大的報表工具,現在已經被Microsoft Visual Studio 2005(下文以VS2005簡稱)內建在一起。喜歡水晶報表的朋友可以友善使用了。我把水晶報表在vs2005的使用方法總結一下,供大家參考。

首先介紹一下我用的軟體環境:Microsoft Visual Studio 2005;Microsoft SQL Server 2005

【資料用例】

伺服器:SQLEXPRESS

資料庫名:Test

資料庫表:T

【說明】

水晶報表在應用時分兩種方法,分别是拉模式(PULL)、推模式(PUSH)。拉模式:在水晶報表生成時的資料源是從水晶報表檔案中的SQL語句從資料庫中提取的,在程式設計時不用重寫SQL語句,但要加上登入資訊(具體方法,後面介紹)。推模式:在水晶報表生成時的資料源,是用程式設計時重寫水晶報表中SQL語句而生成的dataset對像。也就是說,推模式是用dataset組裝水晶報表。

水晶報表元件介紹。水晶報表在VS2005中有兩種元件,在WEB項目是分别是CrystalReportSource,CrystalReportViewer。在FORM項目裡是分别是crystalReport,CrystalReportViewer。

CrystalReportSource,crystalReport是水晶報表的資料提供者;CrystalReportViewer是水晶報表的浏覽器。另外還要介紹一下水的報表的檔案是以rpt為擴充名的檔案,該檔案可以用VS2005生成。

下面分别介紹具體操作方法:

拉模式(PULL):

在拉模式中如要在水晶報表中的SQL語句加上條件參數時要用{?參數名}方式給出。例:“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是參數名

以下例子中所用到的水晶報表檔案中使用的SQL語句是“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是參數名。

【WEB方式下】

using CrystalDecisions.Shared;

using CrystalDecisions.CrystalReports.Engine;

    ///<summary>

    ///功能:拉模式提取水晶報表

    ///</summary>

    ///<param name="sender"></param>

    ///<param name="e"></param>

    protected void Button_pull_Click(object sender, EventArgs e)

{

// CrystalReport.rpt是水晶報表檔案的名稱;CrystalReportSource1是從工具箱加到頁面上的水晶報表資料源對像。

        CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));

// SetDatabaseLogon 拉模式中必須用這個方法來設定登入資訊,參數一:使用者名;參數二:密碼;參數三:伺服器;參數四:資料庫名

        CrystalReportSource1.ReportDocument.SetDatabaseLogon("sa", "123456", @"SYWZSWL\SQLEXPRESS", "Test");

//給水晶報表傳參數,參數一:是參數名,參數二:參數值;

        CrystalReportSource1.ReportDocument.SetParameterValue("Title", "這是一個測試報表");

        CrystalReportSource1.ReportDocument.SetParameterValue("Parm", "1");

//綁定水晶報表資料源。

        CrystalReportSource1.DataBind();

// CrystalReportViewer1是水晶報表浏覽器,下面是給該浏覽器賦上對像

        CrystalReportViewer1.ReportSource = CrystalReportSource1;

        CrystalReportViewer1.DataBind();

    }

【FORM方式下】

//在FORM方式下代碼同WEB方式,用crystalReport控件換掉了CrystalReportSource;用crystalReportViewer換掉了CrystalReportViewer;這兩個控件都可以在工具箱裡找到。同時在程式設計時去掉DataBind()方法。

        private void Form1_Load(object sender, EventArgs e)

        {

            crystalReport1.Load(Application.StartupPath + "CrystalReport.rpt");

            crystalReport1.SetDatabaseLogon("sa", "123456", @"SYWZSWL\SQLEXPRESS", "Test");

            crystalReport1.SetParameterValue("Title", "這是一個測試報表");

            crystalReport1.SetParameterValue("Parm", "1");

            crystalReportViewer1.ReportSource = crystalReport1;

        }

推模式(PUSH):

在推模式中程式設計組裝的Dataset裡的SQL語句中的字段要與水晶報表裡的SQL語句字段一緻。簡單的說,推模式中的水晶報表是個模闆,把在設計器裡報表的格式設好後,再組裝DataSet就可以生成報表了。

using System.Data.SqlClient;

       protected void Button_push_Click(object sender, EventArgs e)

    {

        string sql = "Select T1, T2, T3 FROM T where T1=''a''";

        DataSet ds = new DataSet();

            SqlConnection sqlCon = new SqlConnection(DBConfig_sql);

            SqlCommand sqlCmd = new SqlCommand(sql, sqlCon);

            SqlDataAdapter sqlAd = new SqlDataAdapter();

            sqlAd.SelectCommand = sqlCmd;

            sqlAd.Fill(ds, "sql");

        CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));  

        //注意此處必需指明Dataset中的表的名稱,否則會提示“您請求的報表需要更多資訊.”

CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["sql"]);

//{?}中的參數可以不用指派,即使賦了值也不起作用。

       // CrystalReportSource1.ReportDocument.ParameterFields["Parm"].CurrentValues.AddValue("1234567");

        CrystalReportSource1.ReportDocument.ParameterFields["Title"].CurrentValues.AddValue("這時推模式的報表樣例!");

         CrystalReportViewer1.DataBind();

private void Form1_Load(object sender, EventArgs e)

            //推模式

            string sql = "Select T1, T2, T3 FROM T where T1=''a''";

            string DBConfig_sql = @"Data Source=SYWZSWL\SQLEXPRESS;Initial Catalog=Test;User ID=sa;Password=123456";

            DataSet ds = new DataSet();

            crystalReport1.SetDataSource(ds.Tables["sql"]);

            // CrystalReportSource1.ReportDocument.ParameterFields["Parm"].CurrentValues.AddValue("1234567");

            crystalReport1.ParameterFields["Title"].CurrentValues.AddValue("這時推模式的報表樣例!");

}

這篇文章裡包含了制作水晶報表的基本步驟!

本文轉自黃聰部落格園部落格,原文連結:http://www.cnblogs.com/huangcong/archive/2010/03/26/1697074.html,如需轉載請自行聯系原作者