【说明】
水晶报表在应用时分两种方法,分别是拉模式(PULL)、推模式(PUSH)。拉模式:在水晶报表生成时的数据源是从水晶报表文件中的SQL语句从数据库中提取的,在编程时不用重写SQL语句,但要加上登录信息(具体方法,后面介绍)。推模式:在水晶报表生成时的数据源,是用编程时重写水晶报表中SQL语句而生成的dataset对像。也就是说,推模式是用dataset组装水晶报表。
水晶报表组件介绍。水晶报表在VS2005中有两种组件,在WEB项目是分别是CrystalReportSource,CrystalReportViewer。在FORM项目里是分别是crystalReport,CrystalReportViewer。
CrystalReportSource,crystalReport是水晶报表的数据提供者;CrystalReportViewer是水晶报表的浏览器。另外还要介绍一下水的报表的文件是以rpt为扩展名的文件,该文件可以用VS2005生成。
下面分别介绍具体操作方法:
拉模式(PULL):
在拉模式中如要在水晶报表中的SQL语句加上条件参数时要用{?参数名}方式给出。例:“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是参数名
以下例子中所用到的水晶报表文件中使用的SQL语句是“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是参数名。
【WEB方式下】
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
/// <summary>
///功能:拉模式提取水晶报表
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
protected void Button_pull_Click(object sender, EventArgs e)
{
// CrystalReport.rpt是水晶报表文件的名称;CrystalReportSource1是从工具箱加到页面上的水晶报表数据源对像。
CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));
// SetDatabaseLogon 拉模式中必须用这个方法来设置登录信息,参数一:用户名;参数二:密码;参数三:服务器;参数四:数据库名
CrystalReportSource1.ReportDocument.SetDatabaseLogon("sa", "123456", @"SYWZSWL/SQLEXPRESS", "Test");
//给水晶报表传参数,参数一:是参数名,参数二:参数值;
CrystalReportSource1.ReportDocument.SetParameterValue("Title", "这是一个测试报表");
CrystalReportSource1.ReportDocument.SetParameterValue("Parm", "1");
//绑定水晶报表数据源。
CrystalReportSource1.DataBind();
// CrystalReportViewer1是水晶报表浏览器,下面是给该浏览器赋上对像
CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportViewer1.DataBind();
}
【FORM方式下】
//在FORM方式下代码同WEB方式,用crystalReport控件换掉了CrystalReportSource;用crystalReportViewer换掉了CrystalReportViewer;这两个控件都可以在工具箱里找到。同时在编程时去掉DataBind()方法。
private void Form1_Load(object sender, EventArgs e)
{
crystalReport1.Load(Application.StartupPath + "CrystalReport.rpt");
crystalReport1.SetDatabaseLogon("sa", "123456", @"SYWZSWL/SQLEXPRESS", "Test");
crystalReport1.SetParameterValue("Title", "这是一个测试报表");
crystalReport1.SetParameterValue("Parm", "1");
crystalReportViewer1.ReportSource = crystalReport1;
}
推模式(PUSH):
在推模式中编程组装的Dataset里的SQL语句中的字段要与水晶报表里的SQL语句字段一致。简单的说,推模式中的水晶报表是个模板,把在设计器里报表的格式设好后,再组装DataSet就可以生成报表了。
【WEB方式下】
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using System.Data.SqlClient;
protected void Button_push_Click(object sender, EventArgs e)
{
string sql = "Select T1, T2, T3 FROM T where T1=''a''";
string DBConfig_sql =@"Data Source=SYWZSWL/SQLEXPRESS;Initial Catalog=Test;User ID=sa;Password=123456";
DataSet ds = new DataSet();
SqlConnection sqlCon = new SqlConnection(DBConfig_sql);
SqlCommand sqlCmd = new SqlCommand(sql, sqlCon);
SqlDataAdapter sqlAd = new SqlDataAdapter();
sqlAd.SelectCommand = sqlCmd;
sqlAd.Fill(ds, "sql");
CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport.rpt"));
//注意此处必需指明Dataset中的表的名称,否则会提示“您请求的报表需要更多信息.”
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["sql"]);
//{?}中的参数可以不用赋值,即使赋了值也不起作用。
// CrystalReportSource1.ReportDocument.ParameterFields["Parm"].CurrentValues.AddValue("1234567");
CrystalReportSource1.ReportDocument.ParameterFields["Title"].CurrentValues.AddValue("这时推模式的报表样例!");
CrystalReportSource1.DataBind();
CrystalReportViewer1.ReportSource = CrystalReportSource1;
CrystalReportViewer1.DataBind();
}
【FORM方式下】
private void Form1_Load(object sender, EventArgs e)
{
//推模式
string sql = "Select T1, T2, T3 FROM T where T1=''a''";
string DBConfig_sql = @"Data Source=SYWZSWL/SQLEXPRESS;Initial Catalog=Test;User ID=sa;Password=123456";
DataSet ds = new DataSet();
SqlConnection sqlCon = new SqlConnection(DBConfig_sql);
SqlCommand sqlCmd = new SqlCommand(sql, sqlCon);
SqlDataAdapter sqlAd = new SqlDataAdapter();
sqlAd.SelectCommand = sqlCmd;
sqlAd.Fill(ds, "sql");
crystalReport1.Load(Application.StartupPath + "CrystalReport.rpt");
crystalReport1.SetDataSource(ds.Tables["sql"]);
//{?}中的参数可以不用赋值,即使赋了值也不起作用。
// CrystalReportSource1.ReportDocument.ParameterFields["Parm"].CurrentValues.AddValue("1234567");
crystalReport1.ParameterFields["Title"].CurrentValues.AddValue("这时推模式的报表样例!");
crystalReportViewer1.ReportSource = crystalReport1
报表的数据来源已经不是报表模板使用拉模式获得了,是推模式的一种实现
这样实现的好处是这里的sql是由页面输入条件动态构造出的,可以实现按条件的动态查询。不使用强类型dataset,用datatable非常方便。
这种方式和以前用pb构造动态datawindow的方式一样,我使用起来觉的还是很顺手的。
容易实现的优点从安全性上看就变成了缺点,页面输入拼装sql,安全性不高。
如果涉及多个表,sql很长构造麻烦的情况,使用第二种可能不是很方便。那么在第一种方法下能否实现where条件的动态变化呢
这时可以使用公式筛选记录的方法实现:
ReportDocument.DataDefinition.RecordSelectionFormula = "{**}= " textBox1.Text ;
筛选条件也可以根据页面输入动态构造
我的理解是数据从数据库中拉来后再使用过滤条件进行过滤的方式,性能会不好控制。
当然也可以使用CrystalReportViewer控制过滤,比如
crystalReportViewer1.SelectionFormula = "{**}= " textBox1.Text;
但是按照表示层和基础业务逻辑分开的原则,用ReportDocument更加自然。在vs2005的帮助中有完整的帮助和示例。
要按照使用环境限制,适当选择实现方式。
去年有个多维报表的项目用sqlserver2005的reportservice做的,现在来看水晶报表也完全可以,而且水晶报表也能实现切片和钻取的效果。建立交叉表,两个数据在两个维度变化。尤其是数据源非sqlserver2005的情况下,还是非常好的选择。
技巧:
1.非交叉表实现单元格合并,网上的意见都是无法实现,后来在一个网站上看到了实现方法,虽然不自然,但是效果可以出来,需要合并的单元格都设置为组,并在“节专家”,选择你的组页眉,右边“公用”中选中“延伸到后续节”。设置对象格式,上边框为单线。
在设计时预览都没有问题,但是嵌入网页运行后,不知道为什么线都丢失了。没办法,再插入线,在设计时预览线条会粗些,但是运行时刚好。
这是野路子的实现。
相关推荐
BAPI_REPMANCONF1_CREATE_MTS实战:从MFBF事务码到精准零件反冲的代码级解析
本文深入解析了如何通过BAPI_REPMANCONF1_CREATE_MTS函数实现SAP生产模块中的零件反冲自动化。文章对比了MFBF事务码的手动操作与BAPI编程的优劣,详细拆解了函数的核心参数、数据结构、调用流程及事务控制,并提供了从数据准备到凭证获取的完整代码示例与避坑指南,帮助开发者实现高效、精准的批量投料过账。
vs2005中水晶报表使用整理
转:http://www.cnblogs.com/lodestar/archive/2007/09/27/907827.html vs2005中水晶报表实现 这方面的文章其实非常之多,但因为太多就有些乱,而且CrystalReport的版本不同使用上也有些区别, 前段时间正好需要vs2005下面报表的解决方案,就参考了下网上的资料,整理了一下。 push模式和pull模式 不论
从零构建EtherCAT从站:SSC工具配置与TwinCAT3 PDO/SDO调试实战
本文详细介绍了从零构建EtherCAT从站的完整流程,重点讲解SSC工具配置与TwinCAT3 PDO/SDO调试实战。通过解析EtherCAT通信机制、PDO与SDO的核心概念,提供SSC工具配置技巧、XML文件生成与校验方法,以及TwinCAT3环境下的调试经验,帮助开发者高效完成EtherCAT从站开发与优化。
在没有vs2005环境里部署Crystal Reports 10水晶报表
前几天用VS2005做了个简单的医务系统的演示程序,B/S模式的,里面用到了水晶报表,说实话,这还是我第一次用水晶报表,看了看帮助就开始做,还算是顺利吧,以为是演示用,要求不太高.做完了就发布,然后就把程序给人家了,结果到了人家那水晶报表那块不能看!他说水晶报表发布的时候需要考几个库,VS发布的时候不能自己把dll文件打包放到里面去,我就把那两个文件(CRDesigner.dll,crvspack...
无人机WIFI集群组网技术详解及成本分析
无人机WIFI集群组网技术是指利用无人机作为移动平台,通过集成高性能的WIFI模块,实现多架无人机之间以及无人机与地面控制站之间的无线通信组网。在协议层面,无人机WIFI集群组网需要遵循标准的无线通信协议,如IEEE 802.11系列(即WIFI标准),同时可能还需定制或优化路由协议、媒体访问控制(MAC)协议等,以确保高效、可靠的数据传输。数据安全与隐私保护:无人机集群组网中传输的数据可能涉及敏感信息,需采取加密、认证等安全措施,确保数据传输的安全性和用户隐私的保护。根据性能不同,价格差异较大。
大样本EEG公共数据集汇总
描述: OpenNeuro平台包含多个认知障碍相关的EEG数据集,例如针对轻度认知障碍(MCI)或阿尔茨海默病(AD)的研究。描述: 天普大学医院EEG语料库包含大量临床EEG记录,可通过元数据筛选出与认知障碍相关的片段(如诊断标签包含dementia或MCI)。描述: ADNI主要提供多模态神经影像数据(MRI/PET),但部分合作研究整合了EEG数据。样本量: 部分数据集包含100+被试(例如结合MRI与EEG的多模态数据)。样本量:30,000+ EEG记录(持续更新,全球最大临床EEG数据库)。
Visual Studio 2005中使用水晶报表
Microsoft Visual Studio 2005中使用水晶报表 沈阳 王智 OICQ:16994162 http://wangzhihome.51.net/ 2006-4-11 如有转贴请注明出处 水晶报表是一个功能强大的报表工具,现在已经被Microsoft Visual Studio 2005(下文以VS2005简称)集成在一起。喜欢水晶报表的朋友可以方便使用了。我把水晶报...
保姆级教程:用NVIDIA Jetson AGX Xavier和GMSL2相机搭建8路车载视觉原型系统
本文提供了一份详细的教程,指导如何使用NVIDIA Jetson AGX Xavier开发板和GMSL2相机搭建8路车载视觉原型系统。内容涵盖硬件选型、系统架构设计、软件环境配置、多路视频采集实现以及性能优化与问题排查,帮助开发者快速掌握GMSL2技术在车载视觉系统中的应用。
VS2005 简单水晶报表的实现方式
VS2005 简单水晶报表的实现方式 目录//水晶报表 //报表里面的数据分组和排序 (利用 组专家 和记录排序专家) //设置参数(按照程序提供的参数给出报表) //抑制显示 (过滤显示) //子报表 (主报表,明细报表) //内嵌式连接型子报表示例 (直接显示) //依需要显示子报表示例(象超级链接) //水晶报表中的 图标显示 (图片的形式显示)一
YOLO126优化:损失篇 | AAAI 2025 | 一种基于尺度的动态(SD)损失,根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力
提出了一种基于尺度的动态(SD)损失,它根据目标大小动态调整尺度和位置损失的影响,提高了网络检测不同尺度目标的能力。
嵌入式SDIO 总线面试题及参考答案
SDIO 的 4 位总线模式是一种提高数据传输效率的工作模式。在传统的 1 位总线模式下,数据只能通过一根数据线(DAT0)进行传输,这限制了数据传输的带宽和速度。而在 4 位总线模式下,DAT0 - DAT3 这 4 根数据线同时用于数据传输,相当于在同一时间内可以传输 4 倍于 1 位模式的数据量,从而显著提高了数据传输的带宽和速度。要通过 CMD6 命令将 SDIO 总线从当前模式切换到 4 位总线模式,需要遵循以下步骤:第一步,主设备需要确保 SDIO 卡支持 4 位总线模式。
VS2005下水晶报表如何实现动态数据源绑定?
VS2005下水晶报表如何实现动态数据源绑定? 之前在论坛中经常有人问起在VS2005中使用水晶报表(Crystal Report 10)如何用DataSet实现动态的数据源绑定?关于这个问题我研究了一下,找到了新的解决方案。 在以前VS2003中可以采用PUSH模式推报表,可以用如下的代码实现: con = new SqlConn
Android USB串口通信详解与实例
在Android开发中,USB串口通信是一个常见的需求,尤其是在与硬件设备进行交互时。通过USB串口,我们可以轻松地实现数据的发送与接收。本文将详细介绍如何使用库来实现Android设备与USB串口设备的通信。
VS2005 简单水晶报表的实现方式 .
VS2005 简单水晶报表的实现方式 目录 //水晶报表 //报表里面的数据分组和排序 (利用 组专家 和记录排序专家) //设置参数(按照程序提供的参数给出报表) //抑制显示 (过滤显示) //子报表 (主报表,明细报表) //内嵌式连接型子报表示例 (直接显示) //依需要显示子报表示例(象超级链接) //水晶报表中的 图标显示 (图片的形式显示)
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法
<br />转载地址:http://www.codesky.net/article/doc/201004/2010041706709.htm<br />一、没有安装部署好水晶报表;(vs2008安装后,不等于安装了vs2008水晶报表) <br />二、源程序中:VS2008和v2005的水晶报表版本号不对;vs2008的版本号是:Version=10.5.3700.0 ,造成水晶报表无法使用; <br />三、有时出现找不到水晶报表相对应的命名空间错误:一般是using CrystalDecisions.
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
vs2005水晶报表程序在vs2008下正常使用的一些实现方法
没有安装部署好水晶报表;(vs2008安装后,不等于安装了vs2008水晶报表) 二、源程序中:VS2008和v2005的水晶报表版本号不对;vs2008的版本号是:Version=10.5.3700.0 ,造成水晶报表无法使用; 三、有时出现找不到水晶报表相对应的命名空间错误:一般是using CrystalDecisions.Shared; using CrystalDecisio
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
VS2005下水晶报表如何实现动态数据源绑定
之前在论坛中经常有人问起在VS2005中使用水晶报表(Crystal Report 10)如何用DataSet实现动态的数据源绑定?关于这个问题我研究了一下,找到了新的解决方案。在以前VS2003中可以采用PUSH模式推报表,可以用如下的代码实现: con = new SqlConnection(Session["SQLCONNECTION"].ToString());strSql = "SEL
[转]VS2005下水晶报表实现动态数据源绑定
本文转自:http://www.cnblogs.com/VS2008/archive/2006/05/21/405488.html 原作者:一代风华本文是所有此类文章中写的最好的,推荐相关开发者阅读参考 之前在论坛中经常有人问起在VS2005中使用水晶报表(Crystal Report 10)如何用DataSet实现动态的数据源绑定? 关于这个问题我研究了一下,找到
190



被折叠的 条评论
为什么被折叠?



