報表你們應該都知道是什麼,簡單來講就是用表格、圖表等格式來動態顯示數據。如今web系統中不少須要使用到報表統計、打印功能等,將所需用到的數據綁定到指定的位置,而後分類彙總,這樣查看起來更清晰,管理人員分析數據也一目瞭然。今天就我以前所作的項目總結一下使用stimulsoft報表的經驗。web
首先,須要安裝Stimulsoft,我使用的版本是ultimate旗艦版本,固然這個軟件是須要收費的,若是你們只需學習的話,能夠去官網下載免費試用版。下載完成後,若是項目所需數據庫是oracle,那麼stimulsoft是鏈接不上免安裝客戶端綠色版的plsql的,須要安裝oracle客戶端(注:若是同時安裝了32位和64位Oracle客戶端,必須設置Oracle環境變量PATH只能指向64位客戶端安裝地址(默認會把32位和64位客戶端安裝地址都加上))。sql
其次,由於Stimulsoft報表設計器自己不自帶Oracle鏈接,因此須要如下步驟來添加oracle 的鏈接支持。數據庫
1.打開Stimulsoft報表安裝目錄/Adapters/Oracle.zip,解壓Oracle.zip,而且編譯解壓文件夾下面的Oralce項目,把編譯的Dll拷貝至Stimulsoft報表安裝目錄/bin目錄下面。(項目名稱Stimulsoft.Report.OracleClient,Dll名稱:Stimulsoft.Report.OracleClient.dll)網絡
2。添加完該dll後打開stimulsoft設計器就能看到oracle鏈接了oracle
3. 設置鏈接字符串,測試若是成功,Oracle就鏈接成功沒有問題。若是鏈接保錯請確認是不是64位操做系統安裝了64位客戶端,PATH地址是否設對app
4.根據Oralce鏈接->新建數據源->New Query ,這時並不像Sql Server數據庫會自動加載數據表等信息,須要咱們自定義sql查詢語句。函數
5.填寫sql查詢語句,建議不要點擊運行查詢構造器,若是要查詢結果能夠點擊運行或者查詢結果。sqlserver
6.點擊獲取全部列學習
7.最後綁定數據源,將每一個值的表達式賦值,賦值內容爲該數據源下所獲取到的列。測試
使用Oracle存儲過程的話,上面2.1的步驟就不須要了,若是是使用sqlserver存儲過程,那上面的步驟仍是必不可需的,sqlserver忽略步驟。
首先新建數據源,再也不是選擇Oracle鏈接,而是選擇Dataview,而後經過後臺程序自定義數據源,將存儲過程返回到Dataview中,這種方法比較方便。
而後,與2.1步驟不一樣的是新增自定義列,由於沒有鏈接到數據庫中的表和視圖,因此那些字段列只能在數據源中本身新增,而後和2.1中步驟7同樣綁定列
最後保存,生成報表mrt文件
用vs等設計器打開後實則爲xml文件,oracle和sqlserver的xml文件有所不一樣,若是原先是用sqlserver設計能夠後期把它改爲oracle設計,修改方法以下。
1.將全部鏈接類型爲Stimulsoft.Report.Dictionary.StiOracleDatabase轉換爲Stimulsoft.Report.Dictionary.StiSqlDatabase
2.將全部數據源類型爲Stimulsoft.Report.Dictionary.StiOracleSource轉換爲數據源類型爲Stimulsoft.Report.Dictionary.StiSqlSource
3.另存爲Report_Sql.mrt
4.最好打開設計文件預覽並檢查是否有SqlServer和Oracle表結構不匹配的狀況(字段名稱不一樣等)
1. 能不能實現這種類型的報表?
能夠先看下知識庫裏面的Demo,其中也包含了官網Demo。
2. 能不能實現參數傳遞?
能夠的。
1> 字典->添加變量(如myRowGuid)
2> 若是是須要使用stimulsoft自帶的變量交互區域,則設置變量的Request From User和Allow User Values屬性爲true;若是不須要使用stimulsoft自帶的變量交互區域,由於可能樣式等與系統不匹配,則能夠本身定義變量交互區域(查詢區域),只需設置Request From User和Allow User Values屬性爲false。
3> 如何把變量值傳給報表變量?
ü 在報表使用時(加大括號)
如 select * from customers where RowGuid = {myRowGuid}
ü 在aspx頁面後臺代碼賦值:
StiReport report = new StiReport();
rreport.Load("Report.mrt");
report.Compile();
//初始化值
report["myvariable"] = 123;//若是是字符串要加上單引號'123'或者Sql語
//句寫爲'{myRowGuid}'
report.Render();
StiWebView1.Report = report;
3. 可否改數據庫鏈接?
能夠的。
//清理數據庫
report.Dictionary.Databases.Clear();
//增長數據庫鏈接(Test爲報表中定義的鏈接名稱,MyDataConnectionString爲實際的字符串鏈接)
report.Dictionary.Databases.Add(new StiSqlDatabase("Test",
"MyDataConnectionString"));
4. 是否支持存儲過程和函數獲取數據源?
支持的。其中存儲過程能夠傳參數、函數也能夠傳參數(函數查詢文本如select * from dbo.func({VarA})
1> Sql Server存儲過程設置:
查詢文本:execute Pro {VarA}, {VarB} 類型選擇:Table
2> Oracle存儲過程設置連接地址:
利用微軟企業庫帶參數執行存儲過程,最後用動態遊標查看輸出結果程序集
5. 可以自定義數據源?
能夠的。
Report.RegData(DataSet dataSet)、Report.RegData(DataTable dataTable)、Report.RegData(DataView dataView) 等等均可以給report自定義數據源。
可是對應的DataTable必須取個tableName,由於加載的時候以tableName來加載,如沒有tableName會報錯
例DataTable table = new DataTable("table");能夠
但DataTable table = new DataTable();就會報錯
6. 爲何有些屬性看不到?
在屬性區域右擊能夠選擇Basic、Standard、Professional(最全的)
7. 怎麼查看代碼?
在代碼標籤下面查看。右擊選擇Show Auto Generated Code來查看自動生成的代碼,能夠看到自定義的表達式等。
8. 如何作個性化開發?
1> 將report保存成.cs代碼,修改.cs代碼作個性化開發。保存.cs文件也能夠是進行Debug查找錯誤。
2> 能夠編寫組件的事件,作個性化開發。(點擊屬性->事件標籤)
通常遇到出錯沒法找到錯誤緣由時,能夠保存成.cs文件進行Debug。
report的加載和屬性設置代碼能夠參考Stimulsoft_Reports.Net_FAQ.En.pdf文檔
1.首先須要在頁頭註冊一下stimulsoft,由於我用的是2014.3.0.0版本的設計器設計的,因此這裏註冊也必須是這個版本,不然會報黃頁
<%@ Register Assembly="Stimulsoft.Report.Web, Version=2014.3.0.0, Culture=neutral, PublicKeyToken=ebe6666cba19647a" Namespace="Stimulsoft.Report.Web" TagPrefix="cc1" %>
2.其次在body中插入該控件,設置屬性
<cc1:StiWebViewer ID="StiWebViewer1" runat="server" Height="700px" Width="100%" BackColor="White" BorderColor="White" ToolBarBackColor="240, 240, 240" ScrollBarsMode="True" RenderMode="AjaxWithCache" />
//TODO: Oracle須要添加這兩段代碼加載報表,sql無需添加 StiConfig.Services.Add(new Stimulsoft.Report.Dictionary.StiOracleAdapterService());//數據源類型 StiConfig.Services.Add(new Stimulsoft.Report.Dictionary.StiOracleDatabase());//鏈接類型 string appDirectory = HttpContext.Current.Server.MapPath("");//獲取文件絕對路徑 StiReport report = new StiReport(); report.Load(appDirectory + "\\Report.mrt"); DataSet dsGw = b_wm.GetWzInfoCount(DateFromToEx.FromText, DateFromToEx.ToText, ddlYear.SelectedValue, "01");//從存儲過程獲取崗位培訓統計表 DataSet dsYy = b_wm.GetWzInfoCount(DateFromToEx.FromText, DateFromToEx.ToText, ddlYear.SelectedValue, "02");//從存儲過程獲取業餘學校統計表 if (dsGw == null || dsYy == null) return; DataView dvGw = dsGw.Tables[0].DefaultView;//崗位培訓全部的數據 DataView dvYy = dsYy.Tables[0].DefaultView;//業餘學校全部的數據 report.RegData("GWPXXX", dvGw);//自定義崗位培訓數據源 report.RegData("YYXXXX", dvYy);//自定義業餘學校數據源 StiWebViewer1.Report = report;
若是不是系統不是用的oracle數據庫鏈接,那麼無需添加數據源類型和鏈接類型,也就是開頭兩句不須要,反之除了添加stimulsoft的引用,還需添加Stimulsoft.Report.OracleClient的dll,不然會報找不到網絡路徑,找了好久才發現是這個錯誤。
存儲過程的代碼就不貼出來了,大意就是將所須要的參數傳入存儲過程當中,經過一些條件插入臨時表中,而後設置動態遊標,查看程序結果集。
整個頁面效果截圖以下,爲了方便,我將它暫時縮小了
今天大概就寫這麼多,不知道對於stimulsoft個人理解對不對,若是有人感興趣能夠和我探討探討。