Stimulsoft报表操做笔记(一):统计

1、引言

  报表你们应该都知道是什么,简单来讲就是用表格、图表等格式来动态显示数据。如今web系统中不少须要使用到报表统计、打印功能等,将所需用到的数据绑定到指定的位置,而后分类汇总,这样查看起来更清晰,管理人员分析数据也一目了然。今天就我以前所作的项目总结一下使用stimulsoft报表的经验。web

2、准备工做

  首先,须要安装Stimulsoft,我使用的版本是ultimate旗舰版本,固然这个软件是须要收费的,若是你们只需学习的话,能够去官网下载免费试用版。下载完成后,若是项目所需数据库是oracle,那么stimulsoft是链接不上免安装客户端绿色版的plsql的,须要安装oracle客户端(注:若是同时安装了32位和64位Oracle客户端,必须设置Oracle环境变量PATH只能指向64位客户端安装地址(默认会把32位和64位客户端安装地址都加上))。sql

  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链接了oracle

  

  3. 设置链接字符串,测试若是成功,Oracle就链接成功没有问题。若是链接保错请确认是不是64位操做系统安装了64位客户端,PATH地址是否设对app

  

  4.根据Oralce链接->新建数据源->New Query ,这时并不像Sql Server数据库会自动加载数据表等信息,须要咱们自定义sql查询语句。函数

  

  5.填写sql查询语句,建议不要点击运行查询构造器,若是要查询结果能够点击运行或者查询结果。sqlserver

  

  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表结构不匹配的状况(字段名称不一样等)

3、问题汇总

  

  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、相关代码

  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,不然会报找不到网络路径,找了好久才发现是这个错误。

  存储过程的代码就不贴出来了,大意就是将所须要的参数传入存储过程当中,经过一些条件插入临时表中,而后设置动态游标,查看程序结果集。

整个页面效果截图以下,为了方便,我将它暂时缩小了

5、结语

  今天大概就写这么多,不知道对于stimulsoft个人理解对不对,若是有人感兴趣能够和我探讨探讨。

相关文章
相关标签/搜索