水晶报表 推模式

问题由来:

公司换新系统,过渡期要和老系统共存,原报表使用odbc数据源,因只有一台服务器,所有新系统报表不能再使用odbc数据源了,(两个系统的报表不能使用同一服务器odbc数据源)

解决方案:方案一,修改新系统水晶报表的数据源,改为oledb方式。

方案二,修改水晶报表数据源为推模式,在程序中动态设置数据源。

部分报表使用了方案一,适用于数据量大,页数多的报表。(财务报表)

因为方案一需要修改每个报表的数据源,设置过于麻烦,而公司的报表文件过多,每个系统近百个报表。有5、6个系统,而且方案一太不灵活。所以针对数据量小的使用方案二。

经过几天查找资料测试,终于运行通过。

大概分两种方式:ReportDocument对象,Report数据源控件。

Report数据源控件适用于预览,ReportDocument对象更加灵活,但是为什么不能动态设置数据源?出现未将对象引用设置到对象的实例。

Report数据源控件CrystalReportSource1.ReportDocument作为参数发邮件等偶尔会出现莫名其妙错误。

以下:

ReportDocument rd = new ReportDocument()

case "Manifest":

//加载报表文件
rd.FileName = MapPath("Manifest_A4.rpt");
CrystalReportSource1.ReportDocument.Load(Server.MapPath("Manifest_A4.rpt"));

//第一步:设置数据源
DataSet ds = getrdDataMainfest(siteID, kid);
SetDataSource(ds, rd);
SetDataSource(ds, CrystalReportSource1.ReportDocument);

//第二步:设置参数,这个一定要在设置数据源后面,否则出现缺少参数值错误。
rd.SetParameterValue("show", isshow);
CrystalReportSource1.ReportDocument.SetParameterValue("show", isshow);

ReportName = "Manifest Manifest# " + li[0];
//第三部:选择公式
strRptDBkey = "{view_manifest_all.Manifest_Num}";
strRptDBSite = "{view_manifest_all.SiteID}";

rd.RecordSelectionFormula = sb.ToString();
CrystalReportSource1.ReportDocument.RecordSelectionFormula = sb.ToString();

//第四步:绑定控件
CrystalReportViewer1.ReportSource = CrystalReportSource1;
//CrystalReportViewer1.ReportSource = rd;//未将对象引用设置到对象的实例。
// CrystalReportViewer1.DataBind();
Me.ShowPDFReport(CrystalReportSource1.ReportDocument);
// Me.ShowPDFReport(rd);

public DataSet getrdDataMainfest(string siteID, string kid)
{

//sql语句见笑了
string strSQL = "SELECT * FROM ATP_MASTER.dbo.site where siteID=‘" + siteID + "‘; ";
strSQL += "SELECT * FROM view_mawb_hawb_coload_rpt where siteID=‘" + siteID + "‘ and Manifest_Num= ‘" + kid + "‘ ; ";
strSQL += " SELECT * FROM view_mawb_all where siteid= ‘" + siteID + "‘ and Manifest_Num=‘" + kid + "‘;";
strSQL += "SELECT * FROM view_mawb_hawb_rpt where siteid= ‘" + siteID + "‘ and Manifest_Num=‘" + kid + "‘; ";
strSQL += "SELECT * FROM MAWB_LOADING_INFO where siteid= ‘" + siteID + "‘ and Manifest_Num=‘" + kid + "‘; ";
Response.Write(strSQL);
string connStr = Logistic.Common.Common.GetAeConnectionString();
DataSet ds = Logistic.SqlConn.SqlHelper.ExecuteDataset(connStr, CommandType.Text, strSQL);
ds.Tables[0].TableName = "SITE";
ds.Tables[1].TableName = "view_man_coload_rpt";
ds.Tables[2].TableName = "view_manifest_all";
ds.Tables[3].TableName = "view_manifest_hawb";
ds.Tables[4].TableName = "manifesT_LOADING_INFO";

//一定要设置table名字

return ds;
}

//对主报表和子报表追加数据源。

public void SetDataSource(DataSet ds, ReportDocument rd)
{
foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in rd.Database.Tables)
{

tbl.SetDataSource(ds.Tables[tbl.Name]);
}
foreach (ReportDocument subRd in rd.Subreports)
{

foreach (CrystalDecisions.CrystalReports.Engine.Table tbl in subRd.Database.Tables)
{

tbl.SetDataSource(ds.Tables[tbl.Name]);
}
}

}

补充,对于子报表参数添加,后面会用到时再来更新。

时间: 2024-12-09 11:30:16

水晶报表 推模式的相关文章

水晶报表的推拉模式的具体实现

水晶报表在应用时分两种方法,分别是拉模式(PULL).推模式(PUSH). 拉模式:在水晶报表生成时的数据源是从水晶报表文件中的SQL语句从数据库中提取的,在编程时不用重写SQL语句,但要加上登录信息. 推模式:在水晶报表生成时的数据源,是用编程时重写水晶报表中SQL语句而生成的dataset对像.也就是说,推模式是用dataset组装水晶报表. 1. 拉模式实现: DATATABLE不用在代码中实现,直接把参数和登陆信息传递给报表即可. public ReportDocument Crysta

水晶报表制作甘特图实例

最近两周一直在用水晶报表做图表,像柱状图.折线图.甘特图.饼图等,原以为采用推模式用存储过程把数据推给图表就行了.但在实际操作过程中遇到了不少的细节问题. 1)图例标签文本 如图所示,默认情况下图例中的是 数据库的字段,如果是sum则是  数据库字段+"的和",这显然不是我们想要的,而且在vs集成版本里面这个标签文本是无法修改的. 如果是独立版本的话则可以在预览时点击相应的图例项然后编辑轴标签 但是如果采用推模式的话预览的时候没有数据看不到图表,也就无法进行设置了. 2)折线图线条的粗

关于vs2010下水晶报表的使用入门

关于vs2010下使用水晶报表了解情况记录如下: 1.首先vs2010不再自带水晶报表控件了,需要下载安装vs2010配套的水晶报表控件:CRforVS_13_0.这个控件安装很简单,基本上都选择默认设置就可以了. 2.安装之后,再在vs2010中添加新项,选中reporting,下面就有CrystalReports的选项了,这个就是水晶报表文件. 3.新建一个CrystalReports文件,vs2010会弹出一个水晶报表模版生成向导,可以根据向导指示,一步一步的生成自己需要的报表文件.这里我

C#水晶报表教程

http://apps.hi.baidu.com/share/detail/24298108 水晶报表是一个功能强大的报表工具,现在已经被Microsoft Visual Studio 2005(下文以VS2005简称)集成在一起.喜欢水晶报表的朋友可以方便使用了.我把水晶报表在vs2005的使用方法总结一下,供大家参考.首先介绍一下我用的软件环境:Microsoft Visual Studio 2005:Microsoft SQL Server 2005[数据用例]服务器:SQLEXPRESS

水晶报表制作甘特图教程

最近两周一直在用水晶报表做图表,像柱状图.折线图.甘特图.饼图等,原以为采用推模式用存储过程把数据推给图表就行了.但在实际操作过程中遇到了不少的细节问题. 1)图例标签文本 如图所示,默认情况下图例中的是 数据库的字段,如果是sum则是  数据库字段+“的和”,这显然不是我们想要的,而且在vs集成版本里面这个标签文本是无法修改的. 如果是独立版本的话则可以在预览时点击相应的图例项然后编辑轴标签 但是如果采用推模式的话预览的时候没有数据看不到图表,也就无法进行设置了. 2)折线图线条的粗细 做了一

c# 水晶报表的设计(非常的基础)

最近在公司实习,由于公司需要用到的一种叫做水晶报表的神奇的东东,老大就叫我们学习学习.怕自己以后忘了,也为了以后阅读方便,将其记录下来. 使用工具:vs2008 基本方法一.使用水晶报表的推模式 步骤1.当前解决方案,右键->添加->新建项,选择数据集 步骤2.更改数据集名后选择添加,为了方便我这里没有改名,得到如下的数据集设计界面 步骤3.在上面界面的左面有一个工具栏点击datatable,在右面空白处单击左键,得到一个table,可以对该table进行重名. 步骤4.我们选择添加该数据集的

asp.net中使用水晶报表 ---使用向导

编写环境 vs2013,sqlserver2012 由于我们安装的2013没有水晶报表,所以需要我们手动的去下载并安装 下载地址为http://www.aspsnippets.com/Articles/Download-Crystal-Reports-for-Visual-Studio-2013.aspx 然后我们就来编写我们的水晶报表,在编写前我们需要了解的是水晶报表有两种方式 1.pull 拉 拉的意思就是说,当你用的时候就连接数据库然后返回数据 2.push 推 推的意思就是保存在本地,要

水晶报表(web)表格信息展示

一.环境安装 开发工具使用VS2010+SAP Crystal Reports13_0+.NETformwork4.0 因为vs2010已经不再集成水晶报表,所以需要我们去找合适的版本下载http://scn.sap.com/docs/DOC-7824 或者直接点击连接下载开发安装包(开发工具包) http://downloads.businessobjects.com/akdlm/cr4vs2010/CRforVS_13_0.exe 直接下载部署环境安装包(MSI环境包): 32位系统:htt

水晶报表的三种筛选方法

目录: 一.解决方案一:报表数据访问使用推模型 二.解决方案二:记录选定公式运行时自定义 三.解决方案三:将参数合并到记录选定公式 ---------------------------------- 解决方案一: 报表数据访问使用推模型 需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表.该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来. ---------------