心韵如水

专注于软件开发
 
 
欢迎大家来此发表技术精华
昵称:心韵如水
园龄:5年3个月
粉丝:1
关注:0

搜索

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论
  • 我的标签

随笔分类

  • Delphi 开发 (rss)
  • PB 开发 (rss)
  • VB 开发 (rss)
  • VS .NET 开发(6) (rss)
  • 心情随笔 (rss)

随笔档案

  • 2006年11月 (7)

最新评论

阅读排行榜

评论排行榜

推荐排行榜


Powered by: 博客园
模板提供:沪江博客
博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅订阅 | 管理

置顶随笔

[置顶]Asp.Net中使用水晶报表
摘要: asp.net中使用水晶报表阅读全文
posted @ 2006-11-15 22:55 心韵如水 阅读(2983) 评论(2) 编辑
 
[置顶]使用Developer Express报表控件
摘要: 使用Developer Express报表控件:新建一个报表的时候,在添加新项中选择XtraReport V3 Class选项,名称自己命名,点确定就会跳出它的设计界面。它会有三个区域:PageHeader[one band per page],Detail,PageFooter[one band per page]这三个区域。首先要添加一个ReportHeader[one band per re...阅读全文
posted @ 2006-11-15 22:32 心韵如水 阅读(1347) 评论(4) 编辑
 

2006年11月15日

Asp.Net中使用水晶报表
摘要: asp.net中使用水晶报表阅读全文
posted @ 2006-11-15 22:55 心韵如水 阅读(2983) 评论(2) 编辑
 
在 Visual Studio .NET中使用Crystal Report
 

         在我们开始这个关于如何在VS.NET上使用Crystal Reports的小小的研究之前,我和我的朋友都对如何把它应用于我们的Web程序中感到非常的疑惑。一个星期以后,经过一些努力(在网上查找“how-to”文档),我们掌握了将简单的报表加入asp.net程序中的一些小小技巧。

本文包含将Crystal Report 应用于您的.NET Web 应用程序所需方法的一些汇总,通过这些循序渐进地演示,你将遇到的错误(正如我们曾经所遇到过的)将被减少到微乎其微。为了更有效地利用本文,读者应具备ASP.NET中数据库连接的基本知识,并且正在使用VS.NET开发。请注意我们仅用beta2版对下列代码进行了测试。

本文包括以下内容:

(1)    介绍;

(2)    牛刀小试-在.aspx页面中使用一个已存在的Crystal Report文件;

(3)    Crystal Report演示-使用Pull Model;

(4)    Crystal Report 演示-使用Push Model;

(5)    将Report 文件输出到其它的格式中。

    有各种各样的Crystal Report,这里我们用到的是专为.NET设计的"Crystal Report for Visual Studio .NET"。它是一个rich programming model,以此可以操作它的properties和methods。如果你用VS.NET开发你的程序,你就不需要安装任何额外的软件,因为它已经包括在VS.NET中了。

优势
使用Crystal Report for Visual Studio .NET的主要好处有:

--快速开发报表
--能与相关联图表一起扩展为复杂的报表
--可以与这个web form中的其它控件相互作用
--能够将其输出成常用的.pdf,.doc,.xls,.html,.rtf等格式

总体结构

展示这个具有两层结构的Crystal Report需要:

 客户端:

客户端仅需使用浏览器即可得到装载于.aspx页面中的报表。

服务器端:

- Crystal Report Engine (CREngine.dll)

与其它任务(比如将数据与报表文件合并、将数据输出为不同的格式等)一起,Crystal Report Engine 可以将你的Crystal Report转为传到.aspx页中的简洁明了的HTML.

- Crystal Report Designer (CRDesigner.dll)

使用Crystal Report Designer可以从头开始制作报表,可以设计标题、插入数据、公式、表格、次级报告等。

- The .rpt Report file

将一份报表应用到你的Web应用程序中的第一步是使用Crystal Report Designer创建报表。在你的电脑里已经有了一些现成的样本,你现在就可以用它。

 The Data Source

.rpt文件获取数据的方式取决于你所选用的方法。你可以选择制作Crystal Report以获取数据而无须手工写任何代码,也可以选择绑定你的dataset并将其传入报表文件。稍后我们将看到不同的应用。

- Crystal Report Viewer web form Control (CRWebFormViewer.dll)

Crystal Report Viewer是一个能够插入.aspx页中的web form control。它可以理解为一个包含报表的容器。

注意:在复杂的实现过程中,报表服务器和网络服务器可以位于不同的服务器上,在这种情况下,网络服务器将向报表服务器提出要求。Crystal Report将作为一项web service被执行。

执行模式

执行以下任一种方法均可获取Crystal Report数据。

Pull Model(拉模型)

在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。

Push Model(推模型)

相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。

报表类型

      除了独立于方案的报表外,Crystal Report Designer还可装载包含于方案之中的报表。

 Strongly-typed Report :

当在方案中加入一个报表时,该报表就成为一个Strongly-typed Report。在这种情况下,你可以直接创建报表实例(可以减少若干代码),可以将其隐藏。当然你可以点击Solution Explorer中的”show all files”来显示它。

- Un-Typed Report :

不包含在方案中的报表即Un-Typed Report。在这种情况下,必须创建一个Crystal Report Engine的 'Report Document'对象并将报表手工装载进去。

另外你还应该知道的其它事项:

    尽管Crystal Report Viewer控件内置了zooming、page navigation等选项,但是它并没有内置的打印选项。你必须使用浏览器的打印选项才可以。

    Crystal Report for Visual Studio .NET未注册版本只有前30项功能可用。在此之后的save option将不能使用。为了使用全部的功能,你不得不为之付费。

     缺省安装只只提供了五位用户的许可证,若要支持更多的使用者,必须向www.crystaldecisions.com购买额外的许可证。

牛刀小试-在.aspx页中使用一个已存在的Crystal Report文件

      现在让我们看看如何将一个Crystal Report文件应用于你的web form。

(1) 从tool box中拖出一个"Crystal Report Viewer"放到你的.aspx页面上。

(2)打开这个control的属性窗口。

(3) 在"Data Binding"属性上点击[...]弹出data binding窗口。

(4) 从左边选择"Report Source"。

(5)选择"Custom Binding Expression",在下边的表单中输入以下语句:

"C:\Program Files\Microsoft Visual Studio.NET\Crystal Reports\Samples\Reports\General Business\World Sales Report.rpt"

 记得要包括引号,点OK。

注意:这个‘World Sales Report.rpt’文件是做为VS.NET的一部分被安装的。如果你指定了一个不同的路径安装VS.NET,请自行修改。

(译者注:C#用户请输入以下字符串:"C:\\Program Files\\Microsoft Visual Studio.NET\\Crystal Reports\\Samples\\Reports\\General Business\\World Sales Report.rpt")

经过短暂时间的加载后,你将会看到一个简单的预览 。

上面的步骤实际上在你的.aspx页面上插入了如下代码:

<%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web" %>

和在<form>段里的

<CR:CrystalReportViewer

id="CrystalReportViewer1"

runat="server"

Width="350px" Height="50px"

ReportSource='<%# "C:\Program Files\Microsoft Visual Studio.NET\Crystal Reports\Samples\Reports\General Business\World Sales Report.rpt" %>'>

</CR:CrystalReportViewer>

 (6) 调用DataBind方法,在Code Behind文件中编辑Page Load Event

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)       

DataBind()

End Sub

(7). 保存,生成并运行。现在你已经有了一个包含Crystal Report文件的页面了。
posted @ 2006-11-15 22:52 心韵如水 阅读(263) 评论(0) 编辑
 
关于权限的编程技巧
摘要: 关于权限的编程阅读全文
posted @ 2006-11-15 22:49 心韵如水 阅读(109) 评论(0) 编辑
 
使用javascript实现enter代替tab键的功能
摘要: 使用javascript实现enter代替tab键的功能阅读全文
posted @ 2006-11-15 22:47 心韵如水 阅读(1019) 评论(0) 编辑
 
存储过程使用技巧
摘要: 存储过程的相关使用技巧阅读全文
posted @ 2006-11-15 22:45 心韵如水 阅读(339) 评论(0) 编辑
 
使用Developer Express报表控件

使用Developer Express报表控件:
新建一个报表的时候,在添加新项中选择XtraReport V3 Class选项,名称自己命名,
点确定就会跳出它的设计界面。
它会有三个区域:PageHeader[one band per page],Detail,PageFooter[one band per page]这三个区域。
首先要添加一个ReportHeader[one band per report],可以在它的空白区域,右击鼠标-->Insert Band-->
ReportHeader即可。不需要PageHeader[one band per page]的话,可以把它删掉。
两者的区别主要是PageHeader[one band per page]打印出来的每个页都会显示PageHeader[one band per page]
所设计的内容。而ReportHeader[one band per report]打印出来的只有在首页才会显示。其它的页就不会了。
接着就是主要界面设计的问题,可以在它的空白区域,右击鼠标-->Insert Detail Report-->Unbound即可。
它就会跳出一个DetailReport,它下面还有一个Detail1,主要是用来显示主要内容用的。接着再添加一个用来
显示一个主要内容的列标头,就相当于标志以便更容易查看。可以右击鼠标-->Insert Band-->GroupHeader即可。
就会有一个GroupHeader1显示出来,它是在Detail1上面的,或者还要显示一些主要内容显示完之后的一些数据,
又要右击鼠标-->Insert Band-->GroupFooter即可。
如果又要让它同时显示另外一个,可以选中Detail,然后右击鼠标-->Insert Detail Report-->Unbound它就会
跳出另外一个DetailReport1,它下面还有一个Detail2,添加其它的同上。

要让以下的有数据的话,就要事先对它的数据进行绑定
            DetailReport.DataAdapter = Adp         '数据适配器  
            DetailReport.DataSource = dst          '数据集
            DetailReport.DataMember = "a"          '表 

如果想让所查找出来的数据,让它有顺序排列的话,就要使用它里面的事件了!
如Cell7单元格是在表格里面,但其它表格的单元格绑定在所查找的数据中,数据有5条的话,Cell单元格它就不会自己显示1,2,3,4,5这样排序了

。就要使用它本身单元格的事件。
Private Sub Cell7_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles

Cell7.BeforePrint
        Dim lab As XRLabel = sender
        lab.Text = s  's这个变量要定义一个全局变量,初始值设为1
        s += 1
    End Sub

还有一种情况,可能要对表格每一行数据中的某列进行求和或求个数。
        '求个数
        Dim XrSummary2 As DevExpress.XtraReports.UI.XRSummary = New DevExpress.XtraReports.UI.XRSummary
        Cell32.DataBindings.Add("Text", dst, "a.id")
        XrSummary2.FormatString = "{0}"
        XrSummary2.Func = SummaryFunc.Count
        XrSummary2.Running = DevExpress.XtraReports.UI.SummaryRunning.Group
        Me.Cell32.Summary = XrSummary2  '就可以显示所要的个数

        '求和
        Dim XrSummary1 As DevExpress.XtraReports.UI.XRSummary = New DevExpress.XtraReports.UI.XRSummary
        Me.Cell33.DataBindings.AddRange(New DevExpress.XtraReports.UI.XRBinding() {New DevExpress.XtraReports.UI.XRBinding("Text", dst, "a.startmoney", "{0}")})
        XrSummary1.FormatString = "{0}"
        XrSummary1.Func = SummaryFunc.Sum
        XrSummary1.Running = DevExpress.XtraReports.UI.SummaryRunning.Group
        Me.Cell33.Summary = XrSummary1
       

        '单元格的绑定
         XrTableCell30.DataBindings.Add("Text", dst, "Vouchers.Name")
         Cell17.DataBindings.AddRange(New DevExpress.XtraReports.UI.XRBinding() {New DevExpress.XtraReports.UI.XRBinding("Text", dst1, "a.Depositdate", "{0:yyyy/MM/dd}")})       '日期格式的绑定

    
        '如果要把两个表格中某一列的值相符累加起来
        '定义两个变量interest1,interest2为Double型
        '第一个表格的某个列
    Private Sub Cell25_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles Cell25.BeforePrint
        Dim lab As XRLabel = sender
        Dim value As Double
        value = Convert.ToDouble(lab.Text)
        interest1 += value                '就会求出这一列中所有数据的总和
    End Sub

        '第二个表格的某个列
    Private Sub Cell23_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles Cell23.BeforePrint
        Dim lab As XRLabel = sender
        Dim value As Double
        value = Convert.ToDouble(lab.Text)
        interest2 += value              
    End Sub
 
        '这样就会把这两列的值添加到单元格Cell19中  
    Private Sub Cell19_BeforePrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles Cell19.BeforePrint
        Me.Cell19.Text = interest1 + interest2
    End Sub

posted @ 2006-11-15 22:32 心韵如水 阅读(1347) 评论(4) 编辑
 

2006年11月6日

今天申请了自己的博客
http://www.cnblogs.com/zhangyd1080/
作为一个专业的IT爱好者,今天申请了自己的博客,真的很开心,我将用我所学的知识丰富我的家园,同时为中国的博客事业及IT产业贡献自己青春和热血!
posted @ 2006-11-06 01:03 心韵如水 阅读(85) 评论(0) 编辑