報表


統計

 

一、引言

  報表大家應該都知道是什么,簡單來說就是用表格、圖表等格式來動態顯示數據。現在web系統中很多需要使用到報表統計、打印功能等,將所需用到的數據綁定到指定的位置,然后分類匯總,這樣查看起來更清晰,管理人員分析數據也一目了然。今天就我之前所做的項目總結一下使用stimulsoft報表的經驗。

二、准備工作

  首先,需要安裝Stimulsoft,我使用的版本是ultimate旗艦版本,當然這個軟件是需要收費的,如果大家只需學習的話,可以去官網下載免費試用版。下載完成后,如果項目所需數據庫是oracle,那么stimulsoft是連接不上免安裝客戶端綠色版的plsql的,需要安裝oracle客戶端(注:如果同時安裝了32位和64位Oracle客戶端,必須設置Oracle環境變量PATH只能指向64位客戶端安裝地址(默認會把32位和64位客戶端安裝地址都加上))。

  2.1 使用oracle中表、視圖

  其次,因為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連接了

  

  3. 設置連接字符串,測試如果成功,Oracle就連接成功沒有問題。如果連接保錯請確認是否是64位操作系統安裝了64位客戶端,PATH地址是否設對

  

  4.根據Oralce連接->新建數據源->New Query ,這時並不像Sql Server數據庫會自動加載數據表等信息,需要我們自定義sql查詢語句。

  

  5.填寫sql查詢語句,建議不要點擊運行查詢構造器,如果要查詢結果可以點擊運行或者查詢結果。

  

  6.點擊獲取所有列

  

  7.最后綁定數據源,將每個值的表達式賦值,賦值內容為該數據源下所獲取到的列。

  2.2 使用Oracle存儲過程

  使用Oracle存儲過程的話,上面2.1的步驟就不需要了,如果是使用sqlserver存儲過程,那上面的步驟還是必不可需的,sqlserver忽略步驟。

  首先新建數據源,不再是選擇Oracle連接,而是選擇Dataview,然后通過后台程序自定義數據源,將存儲過程返回到Dataview中,這種方法比較方便。

  

  然后,與2.1步驟不同的是新增自定義列,因為沒有連接到數據庫中的表和視圖,所以那些字段列只能在數據源中自己新增,然后和2.1中步驟7一樣綁定列

  

  最后保存,生成報表mrt文件

  2.3 sqlserver文件轉為oracle

  用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文檔

四、相關代碼

  4.1 在aspx頁面中

  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" />

  4.2 在.cs中

復制代碼
//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我的理解對不對,如果有人感興趣可以和我探討探討。



作者:edisoner 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM