C#水晶报表教程

http://apps.hi.baidu.com/share/detail/24298108

水晶报表是一个功能强大的报表工具,现在已经被Microsoft Visual Studio 2005(下文以VS2005简称)集成在一起。喜欢水晶报表的朋友可以方便使用了。我把水晶报表在vs2005的使用方法总结一下,供大家参考。
首先介绍一下我用的软件环境:Microsoft Visual Studio 2005;Microsoft SQL Server 2005
【数据用例】
服务器:SQLEXPRESS
数据库名:Test
数据库表:T

【说明】
水晶报表在应用时分两种方法,分别是拉模式(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>
    ///功能:拉模式提取水晶报表
   ///个人主页:http://www.dzend.com/
    ///</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 [email protected]"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;
}

------------------------------------------------------------------------------------------------------------------------------------------------------------

水晶报表编程使用方法

1.怎么让组页眉,在同一组中每一页都显示
     插入组的时候,在公用选项页面选中“在每个页面上重复组页眉” 
2.如何向 CrystalReportViewer 和 ReportDocument 传递参数…… 
     一、CrystalReportViewer
             通过 CrystalReportViewer.ParameterFieldInfo 属性……
            1、crystalreportviewer 成员
                  公共实例属性
                  ParameterFieldInfo(从 CrystalReportViewerbase 继承) ParameterFields。获取或设置参数字段集合。 
     二、reportdocument
             通过 ReportDocument.DataDefinition.ParameterFields 属性……
            1、reportdocument 成员
            公共实例属性
            DataDefinition DataDefinition。获取 DataDefinition 对象。 
            2、datadefinition 成员
            公共实例属性
            ParameterFields ParameterFieldDefinitions。获取 ParameterFieldDefinitions 集合。 
     三、参数字段运行时自定义(crystalreportviewer)
             参考:
            设置参数 | Windows 窗体查看器的绑定选项 | Web 窗体查看器的绑定选项 
            可支持用户在 Crystal 报表中通过参数进行输入。这种参数有多种用途。例如: 
            使参数基于数据库字段并允许用户指定该字段的值,以便对报表中的数据进行筛选。 
            使用参数字段将条件格式应用于报表。 
            使用参数字段来定义排序顺序。 
            下列示例说明如何在运行时通过代码设置参数字段值。此例解释了如何设置两个不同的参数:第一个是多值离散参数,第二个是区域值参数。 
在运行时修改参数字段
[c#] 
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields.Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;
更多资料请查看:http://www.devedu.com/develop/2005-4-8/12305/default.aspx
3.设置Crystal Report Viewer 的外观
     设置 Crystal Report Viewer 的属性:
     BestFitPage 布尔值。获取或设置页面视图是大小合适还是用滚动条进行裁剪。
     这个地方设为false后,设置Crystal Report Viewer 的宽度就可以去除滚动条了。
     说明 :目前有两种情况,其中在从 Web 窗体查看器进行打印时会出现问题:
     BestFitPage属性为默认值“真”(即,没有垂直或水平滚动条),但PageZoomFactor大于 100。 
     BestFitPage 设置为“假”,Web 窗体查看器的高度小于报表页的高度(即,有垂直滚动条),而查看器的宽度大于或等于报表页的宽度(即,没有水平滚动条)。
     配合设置 Width、Height 来实现无空白和无滚动条的显示!
     DisplayGroupTree 布尔值。获取或设置树视图是可见还是隐藏。 
    DisplayPage 布尔值。获取或设置工具栏是可见还是隐藏。 
    DisplayToolbar 布尔值。获取或设置工具栏上的转到页按钮是可见还是隐藏。 
    PageZoomFactor Int32。获取或设置报表的缩放因数。

SeparatePages 布尔值。获取或设置报表页是分开还是连接。
    PageToTreeRatio Float64。设置组树与报表视图之间的大小比例。
4.控制工具栏的按钮:
    设置 Crystal Report Viewer 的属性:
    HasGotoPageButton 布尔值。获取或设置转到页按钮的可见性。 
    HasLevelUpButton 布尔值。获取或设置工具栏上的转到上一页按钮是可见还是隐藏。 
    HasPageNavigationButtons 布尔值。获取或设置工具栏上的页面导航按钮是可见还是隐藏。 
    HasRefreshButton 布尔值。获取或设置工具栏上的刷新按钮是可见还是隐藏。 
    HasSearchButton 布尔值。获取或设置工具栏上的搜索按钮是可见还是隐藏。 
    HasZoomFactorList 布尔值。获取或设置工具栏上的缩放因数列表是可见还是隐藏。
5.在 Web 页面里的布局:
    在“设计视图”,修改 CrystalReportViewer 的 Width、Height 属性。
    切换到窗体的“HTML 视图”,修改 style 属性。
<CR:CrystalReportViewer id="CrystalReportViewer1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" Width="350px" Height="50px" EnableDrillDown="False" DisplayGroupTree="False"></CR:CrystalReportViewer>
6.除水晶报表的的公司LOGO
    将 Crystal 公司的Logo 文件替换或删除……
    (1)如果是用 VS.NET 里自带的水晶报表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images\ToolBar\logo.gif
    (2)如果是用水晶报表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images\toolbar\crlogo.gif
7.替换水晶报表里的各种图标和图片
    (1)如果是用 VS.NET 里自带的水晶报表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images
    (2)如果是用水晶报表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images
8.关于打印的时候安装插件:
    在 Crystal Reports 的更新版本中,您可以使用新的 CrystalReportViewer.PrintMode 属性来指定打印模式。其中包含两个选择项:ActiveX 和 PDF。 
   当属性设置为PrintMode.PDF 时,报表会在WEB服务器上导出为PDF,然后以数据流传送到浏览器,使用者可以利用选项,直接打印到打印机。这个选项是跨平台相容的。
当属性设置为PrintMode.ActiveX时,ActiveX 打印控制项允许使用者将报表直接打印到本地打印机

先下载 http://support.businessobjects.com/CRforVS2005/PrintControl.cab,放到自已的服务器上。

若要在 Crystal Reports for Visual Studio 2005 网站显示 cab 包,需将下列 xml 语句加入网站的 web.config 文件(必须加到<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">之后,也就是最前面):
<configSections>
<sectionGroup name="businessObjects">
   <sectionGroup name="crystalReports">
    <section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
   </sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
   <printControl>
    <add key="url" value="http://192.168.88.91/PrintControl.cab"/>   --这里改为.CAB包所在地址
   </printControl>
</crystalReports>
</businessObjects>
注意:只有 Internet Explorer 才会支持 ActiveX 模式。若从非 Internet Explorer 的浏览器 (FireFox、Safari、Mozilla 等) 打印,将会恢复到 PDF 弹出对话框。

然后在打印的页面或直接在主窗体添加一个层,并在层中添加如下代码(可以采用其他方式)
<object id="CrystalPrintControl" classid="CLSID:BAEE131D-290A-4541-A50A-8936F159563A"
    codebase="http://192.168.88.91/printcontrol.cab" height="0px" version="10,2,0,1078"
    viewastext="" width="0px">
</object>
version是版本号,如果你是其他的版本将版本号修改一下即可。
9.已达到系统管理员配置的最大报表处理作业数限制的处理
   解决办法:
   具体为修改下面两个键的值。
   HKEY_LOCAL_MACHINE;SOFTWARE;Crystal Decisions;10.0;Report Application
   Server;InprocServer;PrintJobLimit 修改为1000
   还有一个HKEY_LOCAL_MACHINE;SOFTWARE;Crystal Decisions;10.0;Report Application
   Server;Server;PrintJobLimit 也修改为1000 
   我发现在C:\WINDOWS\Temp这个临时文件里面有大量的水晶报表文件,每使用一次就会生成几个文件,在电脑没有重新启动的情况下它不会被删除,而出现大量的无用文件,在google里面搜了一圈发现也有人碰到这样的情况但回答的很模糊只是说要将水晶报表装载的文档关闭掉,从这里可以看出出现这样的错误应该是程序员人为照成的.
    具体解决如下:
          1.ReportDocumen实例必须为类成员    
             private ReportDocument prtp = new ReportDocument();   
          2.使用完水晶报表必须关闭文件,这样子就不会在windows的临时文件里面产生.
              private void Page_Unload(object sender, EventArgs e)
              {
                    prtp.Dispose();
              }
             Page_Unload 事件是在页面完全显示的时候运行,这样子就解决了.

本文来自(http://hi.baidu.com/%D2%AA%C4%E3%C3%FC%C8%FD%C7%A7%D6%AE%D5%D4/blog/item/ba3eaecefd192c34f8dc6189.html

来自: http://hi.baidu.com/xzyweb/blog/item/a70f9aa59f39e59ed1435827.html

时间: 2024-11-01 14:04:57

C#水晶报表教程的相关文章

水晶报表制作甘特图教程

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

C#水晶报表,窗体不显示,闪退

一.问题说明 由于VS2008以后水晶报表不在集成,要用的话需要单独下载. 这里注意如果是用在C#窗体程序里的话一定要下载exe文件,安装msi文件的话VS工具栏里找不到水晶报表控件的.如果你的是64位系统,在必须安装64为运行时,具体步骤入下图 下载教程如下 http://www.jb51.net/softjc/88860.html 但是我发现安装之后VS2013里新建窗体已经有了水晶报表的rpt文件选项,但是用了报表的窗体在运行的时候就直接闪退. 调试之后发现是这个错误: 未能加载文件或程序

水晶报表 如何设置水晶报表 crystal reports 的字段自动换行

在做报价系统时候水晶报表做最后报表的产出.由于规格字数较长,用户在预览报表时无法看全规格,规格多出部分会导致重叠现象. 百度文库提供一个解决方案: 1.如何设置水晶报表(crystal reports)的字段自动换行 水晶报表从数据库中读取的数据,当字段内容比较长时,很影响美观,需要设置它为自动换行来显示. 影响美观的没有自动换行的报表图示: OK,看了图示,觉得实在太难看了,好,我们来设置它自动换行吧: 1.打开字段的格式化字段属性,将其公用标签下的可以扩大(CANGROW)属性选上,如图:

关于水晶报表的一些错误

运行程序发现未能加载水晶报表的一些文件,其实自从vs2005开始以后的版本就已经不自带水晶报表的插件了,因此需要去下载,现在提供下载的东西 这么多总有一款适合你的 ,当遇到无法加载水晶报表的某些文件时的错误时不妨找到这些文件,安装后试试,如果找不到可以M我.

C# 用vs2008连接SQL数据库做动态水晶报表

博主是个还在上大学的新手,如果有什么说错的地方请务必帮我指出来,谢谢! 想要完成一个能够动态改变其中数据的水晶报表,可以通过创建一个 数据的中转站来存储和输出数据的方式. 借由这个中转站,我们可以通过为它动态输入数据,然后再将数据导出到水晶报表,来达到得到有动态数据的水晶报表的目的. 仅在vs2008中,很多它自带的应用也可以达到中转站的作用,比如数组,数据集等. 博主最近刚在学SQL所以尝试了用VS连接数据库来做水晶报表. 1.首先,博主在SQL中创建了名为xxs的数据库,然后再在数据库xxs

水晶报表 Crystal Report 调用存储过程时出错 找不到表 ,解决方法。

用 CrystalReportViewer1 控件在asp.net的网页上显示报表,如果做报表时调用数据表数据的方式调用是可以成功的,但报表是用存储过程获取数据方式会出现以下错误: 找不到表'RptOpenCheck;1' . 文件 G:\TEMP\FO-OpenCheck {6D191F06-DECF-4A25-88FC-8553E3D435AA}.rpt 内出错: 找不到表. Error: 未将对象引用设置到对象的实例. The table 'RptOpenCheck;1' could no

在水晶报表( Crystal Reports)中插入条形码(附视频)

水晶报表( Crystal Reports)是当今商业市场上最流行的报表环境之一.跨国公司利用水晶报表( Crystal Reports)来生成多种数据源的报表,为业务分析.战略规划和库存控制等方面提供了强大的洞察力.同时水晶报表( Crystal Reports)中也时常引入条形码技术.虽然很多条形码公司提供了条码字体或.NET控件来满足这方面的需求,然而客户发现这些解决方案十分繁琐.复杂而且价格高昂. 2010年,IDAutomation获取了一项特殊条码生成器对象的专利---Native

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

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

(转)VS2010结合水晶报表做条码标签打印功能

本文转载自:http://blog.sina.com.cn/s/blog_552ca1400100y6dd.html 先来个功能效果图: 大家都知道VS2005和VS2008软件本身是包含水晶报表插件的,而新版本的VS2010去掉了SAP水晶报表的插件,想要在VS2010中使用水晶报表首先要下载SAP的插件CRforVS_13_0.exe,我这下载的是13版本的. 下载完成后安装,现在就可以在VS2010里面使用了,哈哈. 1.准备工作,条码实现 具体如何实现条码,这里不再赘述,详细请参考:ht