1) 從webform工具列中拖動水晶報表檢視器控制項(crystal report viewer)至.asp教程x頁面中。
2) 調出水晶報表檢視器控制項的屬性視窗
3) 點擊[...]按鈕查看"data binding"屬性,並彈出了databinding視窗。
4) 從左邊的"bindable屬性”區中選擇“report source”
5) 選中"自訂綁定運算式"選項按鈕,在右邊的底部的視窗中指定.rpt檔案的檔案名稱和路徑,例如:"c:program filesmicrosoft visual studio.netcrystal reportssamplesreportsgeneral businessworld sales report.rpt",然後”確定“
注意:檔案”world sales report.rpt“檔案是在vs.net安裝時建立的。如果你在安裝過程中指定了其它目錄,此時你最好確認一下路徑的正確性。
上面的步驟中實際上是插入了下面這些代碼至asp.net教程檔案中:
<%@ register tagprefix="cr" namespace="crystaldecisions.web" assembly="crystaldecisions.web" %>
以及:
<cr:crystalreportviewer>
id="crystalreportviewer1"
runat="server" width="350px" height="50px"
reportsource='' <%# "c:program filesmicrosoft visual studio.netcrystal reportssamplesreportsgeneral businessworld sales report.rpt" %>''>
</cr:crystalreportviewer>
注意:在飛刀我的vs.net正式版中自動產生的程式碼中reportsource產生的樣式不是這樣子的,它是:
reportsource=" <%# c:xxxxxxxx.rpt %>"
這樣是錯誤的,會出現錯誤資訊,有兩處錯誤:
databind中要有雙引號,因此外部只能用單引號
目錄分隔字元號不能使用"",必須使用""
必須按照使用本文介紹的格式來手動修改,這也算是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作業系統的原因。
使用push模式
我們採用下面的幾步使用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)
2. doc (ms word document)
3. xls (ms excel spreadsheet)
4. html (hyper text markup language – 3.2 or 4.0 compliant)
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模式一樣的了。
使用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頁面中使用水晶報表內建的一些功能,如頁面導航,縮放等。
我們將通過下面的這些步驟來通過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) 建立並運行你的程式!