以下內容為程式碼:
在我們對VS.Net中的水晶報表(Crystal Reports)進行研究之前,我和我朋友對如何將這個複雜的東東加入我們的Web應用有著非常的好奇心。一週以後,在閱讀了大量的「HOWTO」文件之後,我們成功地將一些簡單的報告加入了我們的Asp.net程式中,並得到了一些小決竅。
這篇文章教你如何在.Net Web應用中使用水晶報表,也可以讓你在學習過程中少走一些彎路。為了得到最好的效果,讀者最好需要有一些基礎的Asp.Net存取資料庫的知識以及使用VS.Net的開發經驗。
簡介
水晶報表可以由許多的方法得到,其中一個就是使用VS.Net來創建,它提供了非常豐富模型以使我們能夠在運行時操作屬性和方法。如果你正在使用VS.Net開發.Net程序,那麼你就不需要再安裝其它軟體了,因為他已經內嵌在VS.Net中了。
優點:
VS.Net水晶報表有以下一些主要的優點:
快速的報表開發
能夠匯出成為複雜的互動性圖表
可以與其它控制項一起在WebForm中使用
能夠動態地將報表匯出成為.pdf,.doc,xls,html,rtf等多種格式
結構:
有些元件組成了水晶報表的二層結構,需要的Web應用有:
客戶端:
客戶端只需要一個可以存取嵌入aspx頁面報表的遊覽器就可以了
伺服器:
- 水晶報表引擎(Crystal Report Engine (CREngine.dll))
透過它可以完成一些任務,如在報告文件中合併數據,轉換報告為其它格式等。也正是因為報告引擎的作用,才可以將Asp.Net中的水晶報表轉換成為普通HTML格式
- 水晶報表設計器(Crystal Report Designer (CRDesigner.dll))
水晶報表就是在設計器中創建的,在設計器中你可以設計標題,插入數據,公式,圖表,子報表等。
- .rpt報表文件
執行報表中的第一步就是在水晶報表設計器介面建立此報表,在預設安裝中微軟已經提供了一些現成的.rpt範例。
- Data Source
.rpt檔案取得資料庫的方法取決於你方法的選擇,你能選擇讓水晶報表自己選擇資料而不使用任何程式碼或也可以選擇手動的組裝DataSet,然後再將其傳送到報表檔案。
- 水晶報表檢視控制項(Crystal Report Viewer web form Control (CRWebFormViewer.dll))
水晶報表檢視控制項是WebForm控件,可以將它看成是一個在.aspx頁面中存放報表的容器。 注意:在一些複雜的操作中,報表伺服器與Web伺服器可能不在同一實體主機上,Web伺服器將HTTP請求傳送到報表伺服器上去。水晶報表也可以當作WebService來執行。
執行模式水晶報表取資料可以使用下面的方法實作:
- Pull 模式:
被要求時,水晶報表直接根據指定的驅動連接資料庫然後組裝這些資料。
- Push 模式:
此時開發表必須自行編寫程式碼連接資料並組裝DataSet,同時將它傳送至報表。在些這種情況下,透過使用連線共享以及限制記錄集合的大小,可以使用報表效能最大化。
報表類型:
水晶報表設計器能夠直接包含報表至工程也能夠使用獨立的報表物件。
- Strongly-typed 報表:
當你將報表檔案加入專案時,它就變成了一個「 strongly-typed「報表。在這些情況下,你將擁有直接建立報表的物件的權力,這將減少一些程式碼並且能夠提供一些效能。
- Un-Typed 報表:
這裡的報表並不直接包含在專案中,因此稱為'un-typed' 報表。在這種情況下,你不得不使用水晶報表的」ReportDocuemt「物件建立一個實例,並且」手動「地凋用報表。
其它注意事項
- 儘管水晶報表檢視器擁有一些很酷的功能,如縮放、頁面導航等。但是他不提供列印功能,你不得不呼叫遊覽器的列印功能。
- VS.Net中的水晶報表如果沒有註冊,那麼它只能使用30次,30次後,」保存「功能就不能再使用了。為了避免這個,你不是不在http://www.crystaldecisions.com/這裡註冊此產品。 (好像不是這樣子的,不註冊也好像能用很長的時間,只是不能提供支持)
- 預設安裝的水晶報表只能支援5個用戶,為了支援更多的用戶,你不得不在http://www.crystaldecisions.com/中購買授權。
讓我們感受一下--在Asp.net中使用現成的水晶報表檔案1) 從WebForm工具列中拖曳水晶報表檢視器控制項(Crystal Report Viewer)至.aspx頁面。
2) 調出水晶報表檢視器控制項的屬性視窗
3) 點選[...]按鈕查看"Data Binding"屬性,並彈出了DataBinding視窗。
4) 從左邊的"Bindable屬性」區中選擇“Report Source”
5) 選取"自訂綁定表達式"單選按鈕,在右邊的底部的視窗中指定.rpt檔案的檔案名稱和路徑,例如:"C:\Program Files\Microsoft Visual Studio.NET\Crystal Reports\Samples\Reports\General Business\World Sales Report.rpt",然後」確定“
注意:檔案」World Sales Report.rpt「檔案是在VS.Net安裝時建立的。如果你在安裝過程中指定了其它目錄,此時你最好確認路徑的正確性。
上面的步驟中實際上是插入了下面這些程式碼至Asp.Net檔案:
以及:
id="CrystalReportViewer1"
runat="server" Width="350px" Height="50px"
ReportSource=''>
注意:在飛刀我的VS.Net正式版中自動產生的程式碼中ReportSource產生的樣式不是這樣子的,它是:
ReportSource=""
這樣是錯誤的,會出現錯誤訊息,有兩處錯誤:
必須按照使用本文介紹的格式手動修改,這也算是VS.Net的一個Bug吧。
6) 在Page_Load方法中呼叫DataBind方法。 (代碼為VB.Net)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
DataBind()
End Sub
7)儲存並編譯你的頁面。 現在,你就有一個內嵌水晶報表的WebForm頁面了。
注意:實際開發中,一開始會出現無法存取inetsrv目錄的錯誤,解決的方法是改變其目錄的安全屬性,讓User使用者有可寫入的權限。飛刀我發現.Net系統自已給的解決方法是沒有用的,也可能是我使用的是Windows.Net作業系統的原因。
Asp.Net中使用水晶報表(中)
www.dotnet8.com 2002-9-6 DotNet吧
以下內容為程式碼:
使用Pull模式我們將透過下面的這些步驟來透過Pull模式來執行水晶報表
1.先建立rpt文件,並使用水晶報表設計介面設定一些必須的資料連線。
2.拖曳一個CrystalReportViewer控制項到aspx頁面,設定它的屬性指定我們上一個步驟所建立的.rpt檔。
3. 在程式碼中呼叫DataBind方法。
建立.rpt 檔案:
1) 在右鍵”解決方案遊覽器“,在彈出的選單中選擇”新增“—”新增項目“—>”Crystal Report”
2) 在”Crystal Report 庫”中選擇”作為空白報表“單選按鈕,最後按“確定“。
3)這裡將彈出水晶報表設計器。
4) 右鍵點選報表中的”詳細資料區”,選擇“資料庫”->“新增/刪除資料庫..."
5) 在彈出的」資料庫專家「中,擴展」OLE DB(ADO)「選項,此時會彈出另一個」OLE DB(ADO)「視窗。
6) 在"OLE DB (ADO)" 彈出視窗中,選擇"Microsoft OLE DB Provider for SQL Server" 然後"Next"
7) 指定連接的資訊伺服器: ASPCN (您的機器是什麼名字就寫什麼)
使用者ID: sa
密碼:
資料庫: Pubs
8) 點選”Next“,最後點選”Finish“按鈕。
9) 這時你就能在」資料庫專家「視窗中看到我們選擇的資料庫。
10) 擴充功能”Pubs“資料庫,擴充”表“,選擇”Stores“表並將其加到”選定的表“區中,按一下”OK"按鈕。
11) 現在在」欄位資源瀏覽器「中就會在左邊」資料庫欄位「區中顯示你所選擇的表,以及表中的欄位。
12) 拖放需要的欄位進入報表的」詳細資料「區。欄位名稱將會自動出現在」頁首「區。如果你想修改頭部文字,則可以右鍵點擊」頁首「區中的文字,選擇」編輯文字物件「選項並進行編輯。
13) 保存,這樣我們就有了一個水晶報表檔。
建立CrystalReportViewer 控件
14) 回到前面的WebForm中,拖放一個Crystal Report Viewer控制項到頁面中去。
15) 調出Crystal Report Viewer控制項的屬性窗口,選擇「DataBindings"區點選[...]
16) ”Crystal Report Viewer 資料綁定視窗”中,在右邊的「可綁定屬性」中選擇」ReportSource“,並選擇右下角的「自訂綁定表達式」中指定.rpt檔路徑。
17) 此時你能夠從Crystal Report Viewer 控制項中看到使用一些虛擬資料組成的報表檔案的預覽。
注意:在上面的範例中,CrystalReportViewer可以在設計時直接呼叫真實的數據,因為此時資料已經儲存。在這種情況下,設計時當沒有儲存資料時,他是不能顯示資料的。取而代這的是顯示一些虛擬的數據,只有在執行時才會選取真實的數據。
Code Behind 程式設計
18) 在Page_Load方法中呼叫DataBind方法。
執行你的程式
19) 創建並運行你的程式!
現在您就可以直接在Web頁面中使用水晶報表內建的一些功能,如頁面導航,縮放等。
Asp.Net中使用水晶報表(下)
www.dotnet8.com 2002-9-6 DotNet吧
[HTML]我們採用下面的幾步使用Push模式執行水晶報表:
1. 設計一個DataSet
2. 建立一個.rpt檔案同時將其指定給上一個步驟建立的DataSet。
3. 在aspx頁面中拖曳一個CrystalReportViewer控制項同時將其與前面的rpt檔建立連結。
4. 在程式碼中存取資料庫並將資料存入DataSet
5. 呼叫DataBind方法。
設計一個DataSet
1) 右鍵點選“解決方案瀏覽器”,選擇“新增”--“新增項目”-->“資料集”
2) 從「伺服器資源管理器」中的「SQL Server」拖放「Stores」表(位於PUBS資料庫中)。
3) 此時在資料集中就會有一個Stores表的結構圖。
- .xsd檔案中僅包含一個結構圖,但不會有任何資料在裡面。
建立.rpt 檔案:
4) 使用上面的介紹過的方法來建立此文件,唯一的不同就是使用資料集來取代前面的直接連接資料。
5)建立.rpt檔案之後,右鍵點選「詳細資料」-->"新增/刪除資料庫“
6) 在」資料庫專家「視窗中,展開」項目資料「(代替先前的OleDb),展開「ADO.Net資料集」--"DataSet1“,選擇」Stores「表。
7) 將”Stores"表格新增至「選定的表」中,點選「OK」
8) 使用PULL模式下的方法,建立一個WebForm
建立一個Crystal Report Viewer 控件
9) 建立一個Crystal Report Viewer 控件,並設定其屬性,此處與PULL模式下是一致的。
Code Behind 代碼:
10) 在Page_Load方法中使用下面的子函數:
VB.Net程式碼:
Sub BindReport()
Dim myConnection As New SqlClient.SqlConnection()
myConnection.ConnectionString= "server= (local)NetSDK;database=pubs;Trusted_Connection=yes"
Dim MyCommand As New SqlClient.SqlCommand()
MyCommand.Connection = myConnection
MyCommand.CommandText = "Select * from Stores"
MyCommand.CommandType = CommandType.Text
Dim MyDA As New SqlClient.SqlDataAdapter()
MyDA.SelectCommand = MyCommand
Dim myDS As New Dataset1()
'這就是我們在設計模式上使用的DataSet
MyDA.Fill(myDS, "Stores")
'你不得不使用與你前面DataSet相同名字。
Dim oRpt As New CrystalReport1()
' 水晶報表綁定
oRpt.SetDataSource(myDS)
' 設定水晶報表的ReportSource
CrystalReportViewer1.ReportSource = oRpt
End Sub
C#程式碼:
private void BindReport()
{
string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=";
CrystalReport1 oCR = new CrystalReport1();
Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from Stores";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"stores");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
注意:在上面的程式碼中,你得注意一下oRpt是"Strongly Typed"的報表檔案。如果你需要使用"UnTyped"報表,你得使用ReportDocument對象,然後再呼叫報表檔案。
運行你的程式。
11) 運行你的程序
將報表文件匯出成為其它格式
你能夠將報表文件匯出成為下列格式:
1. PDF (Portable Document Format)
1. 2. DOC (MS Word Document)
2. 3. XLS (MS Excel Spreadsheet)
3. 4. HTML (Hyper Text Markup Language – 3.2 or 4.0 compliant)
4. 5. RTF (Rich Text Format)
使用Pull模式匯出報表當匯出使用Pull模式建立的檔案時,水晶報表精確地開啟所需的數據,以下是執行匯出功能的程式碼:
C#代碼:
VB.Net程式碼:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myReport As CrystalReport1 = New CrystalReport1()
'注意:這裡我們建立一個strong-typed的水晶報表實例。
Dim DiskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = New CrystalDecisions.Shared.DiskFileDestinationOptions()
myReport.ExportOptions.ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
' 匯出成為其它檔案時也需要這個選項
' 如Microsoft Exchange, MAPI等.
myReport.ExportOptions.ExportFormatType = CrystalDecisions. [Shared].ExportFormatType.PortableDocFormat
'這裡我們匯出成為.pdf格式文件,你也能選擇上面的其它類型文件
DiskOpts.DiskFileName = "c:Output.pdf"
'如果你不指定確切的目錄,那麼檔案就會儲存到[Windows]System32目錄中去了
myReport.ExportOptions.DestinationOptions = DiskOpts
'水晶報表檔案不包含直接的FileName屬性,因此你不能直接指定已儲存的檔案名稱
'所以你必須使用DiskFileDestinationOptions對象,設定它的DiskFileName屬性
'為你想要的路徑,最後將水晶報表的DestinationsOptions屬性指定為上面的DiskFileDestinationOption
myReport.Export()
'上面的程式碼將完成導出工作。
End Sub
使用PUSH模式匯出水晶報表當匯出的報表是由PUSH模式建立的時,第一步就是透過程式建立連接並組裝DataSet,設定報表的的SetDataSource屬性。再下面的步驟就有Pull模式一樣的了。
[/HTML]
.NET環境下水晶報表使用總結
水晶報表是一個優秀的報表開發工具,本人在開發通用管理系統的時候,所有報表都使用水晶報表,其簡單、易用和強大的功能令筆者倍加喜愛,現將水晶報表使用手記呈現給大家。
一、使用自備的水晶報表時,請註冊,否則只能使用30次
水晶報表註冊碼註冊號:6707437608
密碼:AAP5GKS0000GDE100DS
二、使用CrystalReportViewer進行預覽
CrystalReportViewer控制項允許在應用程式中查看Crystal Report。 ReportSource 屬性用於設定要檢視哪個報表。此屬性設定之後,報表顯示在檢視器中。報表來源可以是ReportDocument、報表檔案的路徑,也可以是強型別報表。
1. 開啟“工具箱”,並將一個CrystalReportViewer 拖曳到表單上,我們命名為rptVew。
2. 透過拖放操作將Windows 窗體檢視器調整到想要的大小並將其移動到所需位置。
3. 當執行應用程式時,報表將顯示在檢視器中。
三、建立新報表
1. 指向“新增”,點選“新增項目”。
2. 在「新增項目」對話方塊中,從「範本」區域選擇Crystal Report,將報表命名為rptClient,按一下「開啟」。
3. 在Crystal Report 庫中,選擇下列選項之一:
· 使用報表專家— 指導您完成報表的建立流程,並將您的選擇新增至Crystal Report Designer。
· 作為空白報表— 開啟Crystal Report Designer。
· 來自於現有的報表— 建立新報表,它與指定的另一報表設計相同。
注意 Crystal Report 庫包含許多專家,可以引導您完成數個特定類型報表的建立工作。您可能希望使用專家來建立最初的報表,以確定哪種報表建構方法適合您的需求。
4. 按一下「確定」按鈕。
如果選擇使用“報表專家”,便會出現“報表專家”對話框,並附有資料資源管理器。為每個資料夾選擇所需數據,完成「報表專家」標籤介面上的操作,然後按一下「完成」來存取Crystal Report Designer 和您的報表
四、是否需要動態設定資料來源?
Crystal Reports 透過資料庫驅動程式與資料庫連線。每個驅動程式都被編寫為可處理特定資料庫類型或資料庫存取技術。
拉和推模型為了向開發人員提供最靈活的資料存取方法,Crystal Reports 資料庫驅動程式被設計為可同時提供資料存取的拉模型和推模型。
拉模型
在拉模型中,驅動程式將連接到資料庫並根據需要將資料「拉」進來。使用這種模型時,與資料庫的連線和為了取得資料而執行的SQL 指令都同時由Crystal Reports 本身處理,不需要開發人員編寫程式碼。如果在運行時無須編寫任何特殊程式碼,則使用拉模型。
推模型
相反,推模型需要開發人員編寫程式碼以連接到資料庫,執行SQL 命令以建立與報表中的欄位相符的記錄集或資料集,並將該物件傳遞給報表。此方法可讓您將連線共用置入應用程式中,並在Crystal Reports 收到資料之前先篩選資料。
四、從ADO.NET 資料集製作報表
從資料庫建立資料集物件
1. 在專案中新建一個架構檔案:
a. 在解決方案資源管理器中,右鍵點選專案名,指向“新增”,然後點選“新增項目」。
b. 在「新增項目」對話方塊的「類別」區域,展開資料夾,然後選擇「資料」。
c. 在「範本」區域選擇「資料集」。
d. 接受預設名稱Dataset1.xsd。
這就建立了一個新的架構檔案(Dataset1.xsd),以後要用它來產生強型別資料集。此架構檔案將顯示在ADO.NET 資料集設計器中。
2. 指定資料庫位置:
a. 在伺服器資源管理器中,按一下「資料連線」並選擇「新增連線」。
b. 在「資料連結屬性」對話方塊中,按一下「提供者」選項卡,然後選擇提供者(例如Microsoft OLE DB Provider for SQL Server)。
c. 按一下「連線」選項卡,然後指定您的資料庫所在位置。在所需位置輸入伺服器和登入資訊。
d. 點選「確定」按鈕。
此時,您的資料庫及其表格和欄位就出現在伺服器資源管理器的「資料連線」節點下方。
3. 在解決方案資源管理器中,雙擊Dataset1.xsd (如果它尚不是活動視圖)。
Dataset1.xsd 現在應顯示在「資料集」標籤中。
4. 若要為資料集建立架構,請將需要的表從伺服器資源管理器拖曳到Dataset1.xsd 的「資料集」標籤上。
5. 點選「儲存Dataset1.xsd」來儲存「Dataset1.xsd」檔案。
6. 在「生成」功能表上,按一下「生成」為專案產生資料集物件。
ADO.NET 資料集物件提供資料的描述,從它可以向Crystal report 新增表格。使用Crystal Report Designer 中的「資料庫專家」從ADO.NET 資料集物件新增表格。
請在使用「報表專家」建立新報表時呼叫「資料庫專家」。或者,要從已經使用ADO.NET 建立好的報表中存取“資料庫專家”,請在Report Designer 中按右鍵,指向“資料庫”,然後按一下“新增/刪除資料庫”。
將報表連接到ADO.NET 資料集物件
1. 在「資料庫專家」中,展開「專案資料」資料夾。
2. 展開「ADO.NET 資料集」資料夾。
3. 選擇所需資料集物件。
例如,如果當時使用的是從專案「WindowsApplication1」的架構檔案「Dataset1.xsd」中產生的資料集對象,則應該選擇「WindowsApplication1.Dataset1」。
4. 選擇要新增的資料表,和使用其他資料來源一樣。
五、動態改變資料來源的程式碼
Dim dsdataSet As New DataSet()
Dim oRpt As New rptClient() '已建立的報表rptClient
請讀者自行填入資料集dsdataSet
'使用「報表引擎」物件模型將填入的資料集,傳遞給報表
oRpt.SetDataSource(dsdataSet. Tables(0))
' 將帶有資料的報表物件綁定到Windows 窗體檢視器,rptVew(CrystalReportViewer控制項)
rptVew.ReportSource = oRpt
注意FillDataSet 方法可連接到指定的資料庫,擷取數據,然後中斷資料庫連接。如果您希望將資料庫中的多個表新增至報表中,請使用SQL JOIN 語句將這些表連結在一起;然後在FillDataSet 方法中指定一個結果表
六、建立主從報表
在報表中,有許多報表是主從表結構,例如訂單與訂單商品明細,訂單是一個表中的一筆記錄,而分錄是另一個表中的多筆記錄,兩個表透過一個欄位關聯起來,這種報表可利用其分組功能實現,
1.
在
服務噐資源管理器中連接到SQL SERVER 2000上的Northwind資料庫
4. 新增一個資料集Dataset1,將伺服器資源管理器中的Orders和Order Details加入資料集中。
5. 新增一個水晶報表,使用報表專家,在專案資料中選擇“ADO.NET資料集”,插入表格Orders和Order Details,「連結」中是關聯欄位的鏈接,在「欄位」中選擇要顯示的主表和明細表的字段,組中選擇分組依據為Orders表OrdersID字段,總計,圖表,選擇(可進行篩選),樣式(可設定報表標題),可自行設定。設定完後,點擊完成。
6. 在報表設計器中調整需要顯示的欄位的位置、寬度等。
7. 在視窗中加入程式碼。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim oRpt As New CrystalReport1()
Dim dsdataSet As New Dataset1()
Dim CN As New Data.SqlClient.SqlConnection("data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa")
CN.Open()
Dim daOrders As New Data.SqlClient.SqlDataAdapter("select * from orders", CN)
daOrders.Fill(dsdataSet, "orders")
Dim daDetails As New Data.SqlClient.SqlDataAdapter("select * 從 [Order Details]", CN)
daDetails.Fill(dsdataSet, "Order Details")
'使用「報表引擎」物件模型將填滿的資料集,傳遞給報表
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource = oRpt
End Sub
8、執行程序
七、用程式改變報表中text的文字
程式碼如下:
Dim GetTextObject As TextObject
' 依名稱取得ReportObject,將其轉換為TextObject,並傳回此物件。
GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13")
GetTextObject.Text = "XXXX系統"
總結:水晶報表具有非常強大的功能,還可進行匯出WORD、EXCEL、RTF等文件,還可產生複雜、漂亮圖表,是進行WEB和WINDOWS報表開發的利器。
(此文部分資料來自MSDN)
Author:李洪根
E-MAIL:[email protected]
本人有以下設想:
1.透過連線查詢取得SQL資料庫相關資料;
2、置放在DataSet裡;
3、調用水晶報表(線形或柱形範本),產生報表;
4、輸出產生EXCEL文件。
請教各位大俠,如何實現以上思維? (如有範例就更好了)
非常感謝!
-------------------------------------------------- -------------
1.在你的工程中新增項目DataSet,連結資料庫,將需要的資料表或預存程序
拖入此DataSet中,編譯DataSet
2.使用Vs.net自帶的Crystal Report,以DataSet為資料來源建立報表
3.在程式中將數據推入此報表中
4.Crystal Report 有輸出為Excel的選項,通過程式也可以實現
Dim conn As SqlConnection
Dim da As SqlDataAdapter
Dim strSQL As String
conn = New SqlConnection()
conn.ConnectionString = "User ID=sa; PWD=1234;Data Source=xxxx; Initial Catalog =xxxxx"
conn.Open()
strSQL = "Select * from TableName"
da = New SqlDataAdapter(strSQL, conn)
Dim ds As New DataSet()
da.Fill(ds, "TableName")
Dim RptDoc As New ReportName()
RptDoc.SetDataSource(ds)
' 給RptDoc 指定數據,
CrystalView1.ReportSource = RptDoc '給CrystalView指定數據
CrystalView1.DataBind()
conn.Close()
5.如果需要顯示的為多表關聯的欄位,最好以儲存過程建立DataSet
-------------------------------------------------- -------------
請參考如下碼:
string strconn=連接字串;
SqlConnection myconn=new SqlConnection(strconn);
string strcmd=@"select語句";
SqlCommand mycmd=new SqlCommand(strcmd,myconn);
SqlDataAdapter myda=new SqlDataAdapter(strcmd,myconn);
DataSet myds=new DataSet();
myconn.Open();
myda.Fill(myds,"報表名稱");
報表名稱 myrpt =new 報表名稱();
myrpt.SetDataSource(myds);
this.CrystalReportViewer1.ReportSource=myrpt;
匯出到EXCEL:
myrpt.ExportOptions.ExportDestinationType=CrystalDecisions.Shared.ExportDestinationType.DiskFile;
myrpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.Excel;
CrystalDecisions.Shared.DiskFileDestinationOptions opt=new CrystalDecisions.Shared.DiskFileDestinationOptions();
opt.DiskFileName=@"檔案名稱";
myrpt.ExportOptions.DestinationOptions =opt;
myrpt.Export();
水晶報表9的中文幫助下載:
http://www.ourfly.com/download/download.aspx
http://www.enwell.net/soft/
http://www.fast8.com/news.asp
Crystal Reports for Visual Studio .NET
PictureObject 成員請參閱
PictureObject 類別¦ CrystalDecisions.CrystalReports.Engine 命名空間公共實例屬性
Border(從ReportObject 繼承而來) Border。取得Border 物件。
Height(從ReportObject 繼承而來) Int32。取得或設定以緹為單位的物件高度。
Kind(從ReportObject 繼承而來) ReportObjectKind。取得報表物件的類型。
Left(從ReportObject 繼承而來) Int32。取得或設定以緹為單位的物件左上角位置。
Name(從ReportObject 繼承而來) 字串。取得對象名。
ObjectFormat(從ReportObject 繼承而來) ObjectFormat。取得ObjectFormat 物件。
Top(從ReportObject 繼承而來) Int32。取得或設定以緹為單位的物件頂部位置。
Width(從ReportObject 繼承而來) Int32。取得或設定以緹為單位的物件寬度。
請參見
PictureObject 類別
Imports CrystalDecisions.CrystalReports.Engine
Dim picObject As PictureObject
picObject = oRpt.ReportDefinition.ReportObjects.Item("picture1")
來自:http: //expert.csdn.net/Expert/topic/1896/1896874.xml ?temp
=.78677大家在基於webform中使用水晶報表時如果簡單的按照網上“阿刀”的做法,肯定會提示你:登陸失敗。
對於這個問題,斑竹我花了整整一天的時間研究水晶報表的幫助文件,終於得到解決方案。
我不是一個保守的人,我相信有很多的網友正和我一樣在花費精力在研究這個問題,我不願意大家再和我一樣白白的花費精力。
以下是我實作該方案的幾個步驟。大家不要急,慢慢的看下去會對你有很大的幫助。
步驟一:看範例文件水晶報表自備一個範例文件,資料庫是access(不含密碼的)。我首先運行範例文件(基於webform和winform)結果顯示了正確的報表,正如“飛刀”的範例。
於是,我自己建立了一個報表文件和.aspx文件,結果顯示登陸失敗!可是我把報表文件換成範例的報表文件,不再出錯。
問題出在什麼地方?難道是報表格式檔案有關於登陸權限的設定?透過追蹤、調試,我對比分析我的報表文件和範例報表文件,沒有發現任何的不同。看來問題不在報表文件。
是資料庫的問題?我建立一個access結果還是登陸失敗!
不是資料庫的問題(我自己的資料庫是未帶密碼的access,幫助中的資料庫也是如此)?也不是報表格式檔案的問題(我仔細分析了兩者的原程式碼是相同的)?
那麼問題出現在什麼地方?我白思不得其解!
步驟二:找幫助文件於是我再次求助於協助。我翻遍了水晶報表的幫助,終於找到「 存取安全資料庫[C#]」字樣,發現這裡有下面的一段話:
透過Crystal Reports for Visual Studio .NET 存取安全資料庫的過程在Web 表單和Windows 表單之間有所不同。在Windows 窗體中,對話方塊會自動提示使用者輸入使用者名稱和密碼(測試很容易成功)。而在Web 窗體中,您需要設計一個表單以從使用者取得該資訊。對於這兩種情況,均可使用代碼來指定使用者名稱和密碼,從而為應用程式的所有使用者提供相同的安全等級。
於是我對同樣的資料庫(先是用幫助範例中的access資料庫,後來用自己建立的access資料庫)。發現對於同一個報表文件,對於winform能顯示成功,而對於webform則仍然顯示登陸失敗!於是我有點明白上面的意思!
看來問題是出在權限的設定。
步驟三:研究幫助,終於成功!
在幫助裡我找到「設定資料庫登入參數」字樣,裡面提供了一些後來發現是非常有用的信息:
下列範例說明如何將登入參數傳遞到報表的表中。這個範例使用到某個安全的SQL Server 資料庫的連線。
啟動一個新項目為窗體新增一個「按鈕」和四個「文字方塊」控制項。
將「文字方塊」控制項分別命名為:serverNameTxt、dbNameTxt、userNameTxt 和passwordTxt。
雙擊「按鈕」控制項以指定Click 事件的程式碼。根據所用語言插入適當的程式碼。
[C#]
// 宣告所需變數。
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
int i = 0;
// 將報表中的每個資料表依序循環。
for (i=0;i == Report.Database.Tables.Count - 1;i++)
{
// 設定目前表的連線資訊。
logOnInfo.ConnectionInfo.ServerName = serverNameTxt.Text;
logOnInfo.ConnectionInfo.DatabaseName = dbNameTxt.Text;
logOnInfo.ConnectionInfo.UserID = userNameTxt.Text;
logOnInfo.ConnectionInfo.Password = passwordTxt.Text;
Report.Database.Tables [i].ApplyLogOnInfo (logOnInfo);
}
注意受密碼保護的Microsoft Access 和Paradox 等PC 資料庫也使用此方法,但LogOnInfo.ServerName 和LogOnInfo.DatabaseName 要保留為空。
於是我彷照這個樣子,嘗試了一下,出錯提示:沒有發現TableLogOnInfo 和Report。
後來我發現TableLogOnInfo 是屬於CrystalDecisions.Shared 命名空間的成員。於是我加入引用:
using CrystalDecisions.Shared ;
這次問題出現在Report。
Report?這是個什麼東西,我查遍了所有的幫助,並沒有這個函數或類別!
[說真的!這個問題難到了我很長的時間!一直在找Report到底是什麼東西!水景報表公司也真是的,幫助也不寫得詳細一點!該打! ! ! ]
最後我終於發現Report只是一個使用者定義的對象,不是系統本身的對象。
在我困惑的時候,突然我想,為什麼不看看Report後面的DataBase,這是個什麼東西,終於問題解決了,在幫助裡找到如下信息
ReportDocument oRpt = new ReportDocument();
Report屬於DocumentCrystalDecisions.CrystalReports .Engine 類別的成員。
修改程式碼:並新增引用
using CrystalDecisions.Shared ;//負責解釋TableLogOnInfo類
using CrystalDecisions.CrystalReports .Engine ;//負責解釋ReportDocument類別private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//這裡必須事先申明一個ReportDocument物件Report,同時載入資料報表
ReportDocument oRpt = new ReportDocument();
oRpt.Load("c:\inetpub\wwwroot\exer\pagelet\crystal\cr1.rpt");//修改為你自//己的正確位置
//建立安全訊息
//受密碼保護的Microsoft Access 和Paradox 等PC 資料庫也使用此方法,但LogOnInfo.ServerName //和LogOnInfo.DatabaseName 要保留為空
logOnInfo.ConnectionInfo.ServerName = "www";
logOnInfo.ConnectionInfo.DatabaseName = "archives";
logOnInfo.ConnectionInfo.UserID = "sa";
logOnInfo.ConnectionInfo.Password = "123456";
oRpt.Database .Tables [0].ApplyLogOnInfo (logOnInfo);
//建立.rpt檔案與CryStalReportviewer檔案之間的連接
CrystalReportViewer1.ReportSource = oRpt;
}
報表文件終於出現!
哇,我好高興,禁不住站起來伸了個懶腰!
步驟四:最終的完整版的程式碼上面的程式碼不具有系統可擴充和彈性。缺點有二:
(1)、資料報表格式檔案是採用絕對路徑
(2)、資料庫存取權限的設定一旦設定,在最終發布是無法修改的,特別是客戶的SQL SERVER伺服器不可能和你調試的程式環境是一樣的基於這個考慮。引進兩個比較好的東西:
(1)、Server.Mappath函數
(2)、讀取web.config(本範例同時告訴你如何操作web.config設定檔)
最終修改如下:(完整程式碼)資料庫為sql server2000
using CrystalDecisions.Shared ;//負責解釋TableLogOnInfo類
using CrystalDecisions.CrystalReports .Engine ;//負責解釋ReportDocument類別
private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//這裡必須事先申明一個ReportDocument物件Report,同時載入資料報表
ReportDocument oRpt = new ReportDocument();
//取得.rpt檔案真實路徑
string path1,path2;
path1=Server.MapPath (" \exer\pagelet ");
path2=path1+" \crystal\cr1.rpt ";
//oRpt.Load("c:\inetpub\wwwroot\exer\pagelet\crystal\cr1.rpt");
oRpt.Load (path2);
//從web.config中取得logOnInfo參數信息
string a,b,c,d;
//取得ServerName
a=System.Configuration .ConfigurationSettings .AppSettings ["servername"];
//取得DatabaseName
b=System.Configuration .ConfigurationSettings .AppSettings ["database"];
//取得UserId
c=System.Configuration .ConfigurationSettings .AppSettings ["userid"];
//取得password
d=System.Configuration .ConfigurationSettings .AppSettings ["pass"];
//設定logOnInfo參數
logOnInfo.ConnectionInfo.ServerName = a;
logOnInfo.ConnectionInfo.DatabaseName = b;
logOnInfo.ConnectionInfo.UserID = c;
logOnInfo.ConnectionInfo.Password = d;
oRpt.Database .Tables [0].ApplyLogOnInfo (logOnInfo);
//建立.rpt檔案與CryStalReportviewer檔案之間的連接
CrystalReportViewer1.ReportSource = oRpt;
}
整個演示的操作過程說明:
1. 在解決方案資源管理器裡,你需要存放報表檔案處,新增項目:CrystalReport報表,命名為cr1.rpt
2、 在隨後出現的「報表專家」中選擇資料來源時,請務必選擇OLE DB,然後根據你的資料庫的要求選擇回應的驅動引擎:
SQL SERVER:Microsoft OLE DB Provider for SQL server
Access:Microsoft Jet.4.0
3、 輸入正確的資料庫連接,這一步驟大家一般的情況下不會出錯!
4、 建立資料報表,並儲存cr1.rpt文件
5. 開啟webform1.aspx。新增crystalreportviewer控制項:名稱為:CrystalReportViewer1
6. 在webform1.aspx.cs中的page_load事件中加入上面的程式碼:
(註:引用千萬不要忘了!)
************************************************** ***
以下是web.config中與本內容相關的細節
<appSettings>
<add key="servername" value="www"/>
<add key="database" value="archives"/>
<add key="userid" value="admin"/>
<add key="pass" value="123456"/>
</appSettings>
***注意這裡的<add key="pass" value="123456"/>是pass,所以他必須與
//取得password
d=System.Configuration .ConfigurationSettings .AppSettings ["pass"];這裡的AppSettings["pass"] 中的"pass"保持一致。 當然名字是可以隨便起,但必須一致
http://www.cnblogs.com/zhangyd1080/archive/2006/11/15/561770.html