水晶报表 CrystalReport 使用 锦集


1、指定报表的相对路径
方法一: like this:use add ..\ before the path
ContractedBlock.gif ExpandedBlockStart.gif Code
        <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
            AutoDataBind
="True" Height="50px" ReportSourceID="CrystalReportSource1" 
            Width
="350px" />
        
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server" >
            
<Report FileName="..\Base\First.rpt" >
            
</Report>
        
</CR:CrystalReportSource>

方法二:代码动态指定.
C#:
ContractedBlock.gif ExpandedBlockStart.gif Code
        protected void Page_Load(object sender, EventArgs e)
        {
            
if (!Page.IsPostBack)
            {
                InitPage();
 
            }
        }

        
private void InitPage()
        {
            
string pathMain, pathName;
            pathMain 
= Server.MapPath("\\Base");
            pathName 
= pathMain + "\\First.rpt";
            
this.CrystalReportSource1.Report.FileName = pathName;
        }
前台:
ContractedBlock.gif ExpandedBlockStart.gif Code
    
        
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
            AutoDataBind
="True" Height="50px" ReportSourceID="CrystalReportSource1" 
            Width
="350px" />
        
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server" >
            
<Report>
            
</Report>
        
</CR:CrystalReportSource>

2、设置报表的字段自动换行

方法1:右击想操作的字段,选择设置对象格式,选择“可以增大”

3、设置日期格式
方法1:右击想操作的字段,选择设置对象格式--可以选择已经设置好的,或者自定义格式字符串

4、动态指定数据源。摘自:http://www.cnblogs.com/VS2008/archive/2006/05/21/405488.html
在以前 VS2003 中可以采用 PUSH 模式推报表,可以用如下的代码实现:        
   

         con = new SqlConnection(Session["SQLCONNECTION"].ToString());
         strSql 
= "SELECT * FROM htOrder";
         scm 
= new SqlCommand(strSql, con);
         sda 
= new SqlDataAdapter(scm);
         ds 
= new DataSet();
         sda.Fill(ds, 
" order ");
         rptOrder.SetDataSource(ds.Tables[
"order"]);
         crOrder.ReportSource 
= rptOrder;    

在 VS2005 中不再支持“ embedded report ”嵌入式报表, 只能采用非嵌入式报表的方法拉数据,下面是典型的代码:
        
     // 绑定报表数据
             private   void  BindCrystalReports()
ExpandedBlockStart.gifContractedBlock.gif        
{
                
string path1 = Server.MapPath("~\\Report\\");
                
string path2 = path1 + "repOrder.rpt";
                ReportDocument repDoc 
= new ReportDocument();
                repDoc.Load(path2);
                SetDBLogonForReport(repDoc);          
//设置数据登录信息
                crOrder.ReportSource = repDoc; 
                
string selectionFormula = "{htOrder.htID} =" + txtHtID.Text.Trim();//设置报表数据筛选公式
                repDoc.DataDefinition.RecordSelectionFormula = selectFormula;
                crOrder. DataBind ();     
        }

        
// 设置登录信息
         private   void  SetDBLogonForReport(ReportDocument reportDocument)
ExpandedBlockStart.gifContractedBlock.gif    
{
        
try
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
                ConnectionInfo connectionInfo 
= new ConnectionInfo();
                connectionInfo.ServerName 
= ConfigurationManager.AppSettings["ServerName"];
                connectionInfo.DatabaseName 
= ConfigurationManager.AppSettings["DatabaseName"];
                connectionInfo.UserID 
= ConfigurationManager.AppSettings["UserID"];
                connectionInfo.Password 
= ConfigurationManager.AppSettings["Password"];
                Tables tables 
= reportDocument.Database.Tables;
               
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
ExpandedSubBlockStart.gifContractedSubBlock.gif           
{
                    TableLogOnInfo tableLogonInfo 
= table.LogOnInfo;
                    tableLogonInfo.ConnectionInfo 
= connectionInfo;
                    table.ApplyLogOnInfo(tableLogonInfo);
                }

        }

           
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif      
{
                lblNote.Text 
= "<script>alert('数据库登录信息不正确!');</script>";
           }

}


这种方式是不是太频繁琐了,在数据结构更改或者查询条件发生变化时必须要再次更改报表设置,那么在 VS2005 中水晶报表有没有更简洁的方法呢?最好不用写代码就能搞定呢?有,那就是新的数据绑定控件 CrystalReportSource ,这个控件与 SqlDataSource 数据源绑定控件一起连用就可以用 SQL 表达式作数据源推数据了。下面是实现的步骤:

        1. 建立水晶报表,注意报表要用OLE DB ADO方式连接数据源,这样可以省去报表登录窗口的弹出。
        2. 在设计视图中拖拉报表控件CrystalReportViewer,点击右上角智能标签设置报表数据源,选择报表文件,自动生成CrystalReportSource,这时在设计视图中将显示出报表界面,水晶报表将自动用初始数据填充报表字段。注意这里有个小Bug,如果报表在子目录中,选择报表文件将自动用相对路径表示,这时报表显示会出错,应改成绝对路径才可以。
            <Report FileName="report\rptOrder.rpt">这里应改成:<Report FileName="..\report\rptOrder.rpt">
        3.拖拉一个数据源控件SqlDataSource(也可以用ObjectDataSource),按向导生成数据源,这里可以筛选数据,根据情况选择各类数据源。            
        4.如何将CrystalReportSource与SqlDataSource两个控件连接在一起呢?可以这样:选择CrystalReportSource控件点击右侧属性中数据栏,再点击Report选择DataSource,在这个数据源集合编辑器选择数据源指定报表名称即可。(下面的Parameters是用来选择报表参数用的)

        经过这几个步骤,就可以运行程序显示报表啦,怎么样不用写一句代码吧?

具体代码可参考如下:

< CR:CrystalReportViewer  ID ="crOrder"  runat ="server"  AutoDataBind ="True"   ReportSourceID ="ReportSourceOrder"   BestFitPage ="False"  DisplayToolbar ="False"  DisplayGroupTree ="False"  Height ="1042px"  Width ="775px"  EnableParameterPrompt ="False"   />         
        
< CR:CrystalReportSource  ID ="ReportSourceOrder"  runat ="server" >
            
< Report  FileName ="..\report\rptOrder.rpt" >                            
                    
< DataSources >
                            
< CR:DataSourceRef  DataSourceID ="SqlDataSourceOrder"  TableName ="htOrder"   />
                    
</ DataSources >
              
</ Report >
        
</ CR:CrystalReportSource >
        
< asp:SqlDataSource  ID ="SqlDataSourceOrder"  runat ="server"  ConnectionString ="<%$ ConnectionStrings:cc_2005 %>"
            SelectCommand
="SELECT * FROM [htOrder] " ></ asp:SqlDataSource >

 

5、自定义报表格式 摘自:http://www.cnblogs.com/zxsoft/archive/2007/11/28/974933.html

ContractedBlock.gif ExpandedBlockStart.gif Code
1.使用VS2005新建一个水晶报表项目

[图1]
2.选择空白报表

[图2]
3.字符资源管理器中右键数据库字段,选择"数据库专家"

[图3]
4.展开"创建新连接","OLE DB (ADO)",双击"建立新连接"

[图4]
5.选择"Microsoft OLE DB Provider for SQL Server"。

[图5]
注:如果使用别的数据库,则相应选择对应的驱动。如Access用"Microsoft Jet 4.0 OLE DB Provider",或Access 2007用"Microsoft Office 12.0 Access Database Engine Ole DB Provider",或SQL Server 2005用"SQL Native Client"等等
6.选择对应的表,并点击">"按钮。

[图6]
7."字段资源管理器"中,"组名字段"上右键。选"插入组"。

[图7]
8.分组依据字段选择OrderId,再点击"选项",选中"将组放在同一页上"。

[图8]

[图8-2]
9.按上面的方法,在"运行总计字段"上右键新键。找到amount字段,点">"按钮,并在"重置"选项组中选择"组更改时",如图所示。然后"确定"。

[图9]
10.需要创建的字段已经都创建好了,按下图的方法拖到报表设计器中。其中,"记录号"字段在"字段资源管理器"的"特殊字段"里。"productid"和"amount"都在"数据库字段"里。"组 #1名"在"组名字段"里,不过这个字段会在创建组的时候自动添加,所以不需要自己拖放。"#RTotal0"字段在刚建好的"运行总计字段"里。"订购单号"和"合计"都是"工具箱"中的"文本对象"。

[图10]
11.因为格式要求,将[图10]中自动生成的Section2 (页眉)中的三个字段都删掉。
12.根据需要,添上页眉。在字段上右键设置一下文本格式,如,根据格式要求,合计后应是18,不是18.00。则可在#RTotal0上右键,把"系统默认数据格式"改成"-1123"。

[最终设计图]
13.运行看看效果

[效果图]
14.成功! 


6、设置报表系统自动登录 摘自:http://blog.csdn.net/swebin/archive/2007/09/28/1805255.aspx
首先,为了登录方便,将数据库的用户名和密码先写到Web.config中:

<appSettings>
    
<add key="DBServerName" value="你的数据库服务器" />
    
<add key="DBUserID" value="sa" />
    
<add key="DBPassWord" value="UU1Tc3lzdGVt" />
</appSettings>

然后写个类来统一验证登录

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace BLL
{
    
public class LoginCrystalReport
    {        
        
public void Login( CrystalDecisions.CrystalReports.Engine.ReportDocument report)
        {
            
string serverName=ConfigurationManager.AppSettings["DBServerName"];
            
string userId = ConfigurationManager.AppSettings["DBUserID"];

            
string passWord=ConfigurationManager.AppSettings["DBPassWord"];
           
            
//Set Database Logon to main report
            foreach (CrystalDecisions.Shared.IConnectionInfo connection in report.DataSourceConnections)
            {
                
if (connection.ServerName == serverName)
                {
                    connection.SetLogon(userId, passWord);
                }
            }

            
//Set Database Logon to subreport
            foreach (CrystalDecisions.CrystalReports.Engine.ReportDocument subreport in report.Subreports)
            {
                
foreach (CrystalDecisions.Shared.IConnectionInfo connection in subreport.DataSourceConnections)
                {
                    
if (connection.ServerName == serverName)
                    {
                        connection.SetLogon(userId, passWord);
                    }
                }
            }
        }

       
    }
}


本文来自CSDN博客,转载请标明出处:http:
//blog.csdn.net/swebin/archive/2007/09/28/1805255.aspx

现在准备工作已经做好了,下面开始制作水晶报表.对于如何设计水晶报表我在这里就不讲了.
报表做好后,新建一个WEB页,先拖一个水晶报表查看器,再拖一个水晶报表数据源,这些在VS2005的工具箱中都有,然后将查看器的数据源设置成刚才拖进来的水晶报表数据源,再将水晶报表数据源的数据源设置成刚才完成好的报表,这时候切换到代码,开始编写代码:

ContractedBlock.gif ExpandedBlockStart.gif Code
protected override void OnInit(EventArgs e)
    {
        
base.OnInit(e);
        BLL.LoginCrystalReport logCR 
= new BLL.LoginCrystalReport();
        logCR.Login(
this.CrystalReportSource1.ReportDocument);
        
    }


好了,现在就可以不输入登录了。

7、水晶报表自动补空行及格线(无分组版)转自:http://www.cnblogs.com/babyt/archive/2009/02/15/1391145.html

问题的提出:

一个带格线的清单类报表,假设有6行,我们设定的页面纸型能容纳5行,那么数据会分成两页。
第1页显示5行,占满1页,而第2页则只显示1行,后面是一片空白区域。
怎么能根据数据的多少,自动填满后面的空白区域呢?

如下图(第2页):


解决方法:

清单类的报表,要填充的是最后一页的剩余区域。我们以每页显示5行数据为例。
那么对于最后一页只有五种情况。
1:最后一页刚好有5条数据,不需要填充。
2:最后一页有4条,需要填充1个空行;有3条,需要填充2个空行;有2条,需要填充3个空行;有1条,需要填充4个空行。

以有1条数据为例子,最大加4个空行。于是,加上原来的数据行,那么详细资料节上应该有5个小节。
设计出来的模板如下:

将详细资料节拆分成5个节,最上面的一个放数据,设置为显示,其余的4个节全部抑制显示,我们用公式来控制它的显示与否


画线方法:在页眉和页脚画个框,框的下边沿紧贴在页眉的上边沿。

然后在每个详细资料节的上边沿下面都画一条横线。

字段间画竖线,注意竖线的下边的这个顶点要顶在页脚这个节的线上。 


下面我们来控制显示,

以下公式使用Crystal语法

1:编辑“详细资料节b” (也就是第一个空白节,我在上面放了一个字段做标记,实际使用时不需要)抑制显示后面的公式 

count({雇员.出生日期}) mod 5 表示最后一页上剩余的数目。这个值是0、1、2、3、4

0表示已经塞满,大于0表示需要填充

 

 

 


// 注意这2个and条件
// 1:count({雇员.出生日期}) mod 5>0  说明记录数不是5的倍数,也就是说需要补空行
// 对于这个节来说,只要需要补,就显示
// 2:onlastrecord 这个条件是“是否是最后一条记录”,说明这个节只出现在最后一条记录之后
//也就是会出现在最后一页上
if count({雇员.出生日期}) mod 5>0   and onlastrecord then

 

    false //外面勾选了抑制显示,那么false的意思就是不抑制显示。也就是这个节在这个条件下会显示
else
    
true

 

 

那么好,只要count({雇员.出生日期}) mod 5 >0 ,那么这个空白节就显示了。


2:现在来设置“详细资料节c”,第2个空白节。因为第一个详细资料节b之前已经显示了。

那么这个节,将只出现在需要2个2个以上空白行的情况,也就是说,count({雇员.出生日期}) mod 5 的值需要是1、2、3
于是公式就变成了。

 

 

if count({雇员.出生日期}) mod 5>0 and count({雇员.出生日期}) mod 5 <=3  and onlastrecord then
  
false
else
  
true

 

 

继续,后面的“详细资料节d”,第3个空白节,将只出现在count({雇员.出生日期}) mod 5 的值需要是1、2的时候

于是,公式为

 


if
 count({雇员.出生日期}) mod  5 > 0  and count({雇员.出生日期}) mod  5   <= 2  and onlastrecord then
  
false
else
  
true

 


继续, 后面的“详细资料节e”,第4个空白节,将只出现在count({雇员.出生日期}) mod 5 的值是1的时候

于是,公式为

 


if
 count({雇员.出生日期}) mod  5=1  and onlastrecord then
  
false
else
  
true

 


好设置完毕。

如果是5以外但是数字,假设为N。

那么详细资料节就拆成N个,第一个放数据 ,后面的公式依次类推。
第1个空行条件为 :
if count({雇员.出生日期}) mod N >0  and onlastrecord then

第2个到倒数第2个空白节的公式为:
if count({雇员.出生日期}) mod N >0  and count({雇员.出生日期}) mod N <=(N-2)  onlastrecord then

if count({雇员.出生日期}) mod N >0  and count({雇员.出生日期}) mod N <=(N-3)  onlastrecord then
...
if count({雇员.出生日期}) mod N >0  and count({雇员.出生日期}) mod N <=2  onlastrecord then

最后一个空行公式为:
if count({雇员.出生日期}) mod 5=1 and onlastrecord then
...

这样设置好就可以了。


其他:

如何保证每行的行高是一样的?
首先做好第一行,然后在在节专家中拆出其余的行。新增的行比第一行都要矮。复制数据行上的一个字段。粘贴到下面的各行,此时行高会自动调整到这个字段的高度。

此处下载示例报表,带数据(CR XI R2独立版本)


 

转载于:https://www.cnblogs.com/beyond0309/archive/2009/08/28/1555988.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
======================================================= == 如果喜欢英文文档的朋友 == Crystal-Reports-2008-For-Dummies.pdf == == 链接: == http://download.csdn.net/download/a6566232/4627865 ======================================================= Crystal Reports 2008 用户指南 Crystal Reports 2008 Windows 2.1 介绍.....................................................31 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 利用 Flash、Flex 和 Xcelsius 实现的高级信息可视化...32 改善的最终用户报表查看体验..........................33 增强的报表设计器功能................................33 新增的灵活部署选项..................................34 灵活的应用程序集成..................................35 2.2 不同之处.................................................35 第 3 章安装 Crystal Reports 2008 37 3.1 安装概述.................................................37 3.2 安装 Crystal Reports 2008................................37 3.3 安装要求.................................................38 3.4 在本地计算机上安装 Crystal Reports.......................38 3.4.1 在本地计算机上安装...................................39 3.5 创建安装点并从网络服务器进行安装.........................45 3.5.1 创建 Crystal Reports 的安装点........................46 4 Crystal Reports 2008 用户指南 3.5.2 从网络安装 Crystal Reports...........................46 3.6 自定义安装...............................................52 3.7 运行无提示安装...........................................54 3.8 设置自定义横幅...........................................59 3.9 升级 Crystal Reports 组件................................60 第 4 章快速开始61 4.1 了解如何使用 Crystal Reports.............................61 4.1.1 示例数据 -- Xtreme.mdb...............................61 4.2 报表创建向导.............................................62 4.2.1 标准.................................................62 4.2.2 交叉表...............................................62 4.2.3 邮件标签.............................................62 4.2.4 OLAP.................................................63 4.3 新用户快速入门...........................................63 4.3.1 开始之前.............................................63 4.3.2 创建报表.............................................64 4.3.3 记录选择.............................................75 4.3.4 分组及排序...........................................79 4.3.5 完成报表.............................................82 4.4 高级用户快速开始.........................................83 4.4.1 选择报表类型及数据源.................................83 4.4.2 在“设计”选项卡上处理报表元素.......................84 4.4.3 使用其他报表功能.....................................86 第 5 章报表设计概念88 5.1 基本报表设计.............................................88 目录5 5.2 决定报表内容.............................................88 5.2.1 说明目的.............................................88 5.2.2 确定报表布局 ........................................89 5.2.3 查找数据.............................................90 5.2.4 操作数据.............................................91 5.2.5 确定打印区域特性.....................................92 5.3 设计纸张原型.............................................94 5.3.1 设计纸张原型.........................................94 第 6 章报表创建基础95 6.1 报表创建选项.............................................95 6.1.1 报表创建向导.........................................95 6.1.2 另一个报表...........................................95 6.1.3 新建报表.............................................96 6.1.4 报表创建向导.........................................96 6.1.5 另一个报表...........................................96 6.1.6 新建报表.............................................96 6.2 选择数据源和数据库字段...................................97 6.2.1 数据库专家...........................................97 6.2.2 字段资源管理器.......................................99 6.3 关于报表设计环境........................................101 6.3.1 “设计”选项卡......................................101 6.3.2 “预览”选项卡......................................105 6.3.3 HTML 预览选项卡.....................................109 6.4 创建新报表..............................................110 6.4.1 选择数据源..........................................110 6.4.2 添加表..............................................111 . . . .

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值