最近一直在學水晶報表,一些基礎知識覺得學了不少,可是還是覺得水晶報表的核心還沒有學會!可是是在自學的原因吧.沒有人指導,隻是自己埋着頭自己學,什麼地方學偏了也不知道。
有一點一直認為自己的認識有偏差,就是我總是認為水晶報表很簡單,隻是能實作選擇顯示列印的功能。但是她到底能不能實作删改的功能呢?查了一些資料都沒有說!但是水晶報表不是都是說功能強大嗎!怎麼可能隻有這麼點功能呢?有點懷疑自己!有沒有水晶報表學的比較好,可否給點指導呢啊?
下面是我收集的一些水晶報表的基礎資料:
晶報表是一個功能強大的報表工具,現在已經被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,如需轉載請自行聯系原作者