用crystal报表,文件——新建文件——crystal报表,然后根据向导建立
创新互联公司主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、响应式网站、程序开发、网站优化、微网站、小程序开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的成都网站设计、成都做网站、外贸网站建设、网站设计、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体。
编辑词条ActiveReportActiveReport 是.net下的一个出色的报表开发程序,虽然和水晶报表相比,名气不那么大,甚至有很多人不知道它的存在,但是并不妨碍它在.net报表开发中的出色表现.一. ActiveReports for .net的主要功能介绍支持ASP.NET-ActiveReports在WebForms应用程序中通过使用ASP.NET 服务器控件来使用。这个控件支持分布式web报表,可使用HTML,ActiveX,.NET 和PDF浏览器。完全代码集成-使用Microsoft Visual Studio.NET编辑器用C#或VB.NET编写报表的代码,非常灵活。报表向导-报表向导帮助您开始创建使用集成设计器来定制的简单报表。设计器-对象模版完全显现的对象模版。允许您动态的建立和修改报表Report Creation API提供了完整的运行时访问报表对象和成员功能。最终用户报表设计器终端用户设计器为您提供了向您应用程序中加入设计器的功能,同时提供了终端用户报表编辑功能。控件的方法和属性能方便的存储和加载报表布局,监测和控制设计环境,并可根据终端用户的需要定制外观。与ASP.NET集成Web浏览器控件为您提供了web上的快速浏览ActiveReports 以及打印功能,并具有ActiveX浏览器和Acrobat Reader 浏览器类型的属性。RPX 文件HTTP处理器为您提供了在web服务器上轻松的放置报表的功能,并可使您的Internet用户采用HTML 或PDF进行浏览,而不需要编写任何代码。编译的报表HTTP处理器提供了直接访问服务器的程序集中编译的ActiveReports,而不需要编写任何ASPX页面。发布-容易部署报表引擎是一个简单处理强名称程序集。程序集可以使用XCopy发布或放置于程序集全局存储器中(GAC)。专业版包括HTTP 处理器和服务器并行web控件,用于ASP.NET 报表。设计器-容易学习与.NET 环境完全集成熟悉的用户界面支持C#和Visual Basic.NET报表将作为您应用程序中的一部分进行编译,以加快处理速度,增强安全性,并且用户可以有选择的分别发布。初学者报表向导和Microsoft Access 报表导入向导设计器拥有第三方控件(图表控件,图像控件等)。数据访问-容易连接包括OLEDB和SqlClient报表数据源包括灵活的xml数据源绑定到Dataset,DataView,DataTable和任何IListSource 控件数据源属性能在运行时修改,生成ad hoc(动态)报表灵活的非绑定数据预览和输出-容易显示支持C#代码小型部署程序集,适用于Internet 上使用TOC/Bookmarks超链接输出过滤文件格式为RTF、PDF、EXCEL、HTML、TIFF 和文本文件。官方网站: 二.注册下面代码放置在***.exe.config或者Web.config里面:addkey="DataDynamicsARLic" value="DD-APN-10-C001733,DD-APN-10-C001733,DD-APN-10-C001733,XY6Y7KQBTY12323KJCKJ" /每个方案旋转文件licenses.licx后,重新生成:DataDynamics.ActiveReports.ActiveReport, ActiveReports, Version=1.2.2003.630, Culture=neutral, PublicKeyToken=dbe4120289f9fd8a 右边红线出现,是因为报表超出长度限定,如果那样打印的话,会多带出一张空白纸。1 Left margin + right margin + printwidth must be less than the paper width2 While right.margin 1.0 then it will appear三.使用指南此控件目前的文档很少,参见参考资料,只能自己看SAMPLES或者下载E文文档汉化ActiveReports 2.0界面Public Sub Creport(AReport As ActiveReport)'汉化ActiveReport'以下适用2.0With AReport.ToolBar.Tools.Item(0).Tooltip = "各页目录".ToolBar.Tools.Item(2).Caption = "打印...".ToolBar.Tools.Item(2).Tooltip = "打印报表".ToolBar.Tools.Item(4).Tooltip = "拷贝".ToolBar.Tools.Item(6).Tooltip = "查找".ToolBar.Tools.Item(8).Tooltip = "单页显示".ToolBar.Tools.Item(9).Tooltip = "多页显示".ToolBar.Tools.Item(11).Tooltip = "缩小".ToolBar.Tools.Item(12).Tooltip = "放大".ToolBar.Tools.Item(15).Tooltip = "".ToolBar.Tools.Item(16).Tooltip = "".ToolBar.Tools.Item(19).Tooltip = "后退".ToolBar.Tools.Item(19).Caption = "后退".ToolBar.Tools.Item(20).Tooltip = "前进".ToolBar.Tools.Item(20).Caption = "前进"End WithEnd Sub四.如何发布 ActiveReports for .NET 程序集有两种部署 ActiveReports 程序集的方法。每种方法根据您的安装方法而定。如果您正将工程从开发计算机拷贝到您的服务器上,您需要将工程引用中的 ActiveReports 引用设置为 CopyLocal = True。这样 ActiveReports DLL 将在编译工程中的 bin 文件夹中。如果您正为您的软件制作安装程序,您需要包含 ActiiveReportsDistrib.MSM 文件,该文件将包含在 ActiveReports for .NET 的安装中。例如,该文件可能被安装在C:\Program Files\Data Dynamics\ActiveReports for .NET\Deployment 文件夹中。还有第三种方法来实现,但并不推荐。因为该方法比较复杂。您可以使用命令行工具来安装 GAC 中的每一个DLL。格式为:'C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bingacutil -i。
Visualbasic代码编辑器没有这个功能,但可以用第三方的编辑软件Emedit来实现这个功能。
1、用Emedit打开*.frm文件。
2、点工具,当前配置属性,然后勾选显示行号即可。
With Me.ReportViewer1 '初始化报表
.Dock = DockStyle.Fill
.LocalReport.DataSources.Clear()
.LocalReport.ReportPath = "Report1.rdlc"
.RefreshReport()
End With
报表在设计时,不一定要绑定数据源,但在窗体加载时,需要初始化报表控件,以上代码可以放在窗体加载的Load事件里,供你参考。
CrystalReportViewer
dataset 定义数据源
.rpt 文件描述具体报表样式
再加一个调用报表的FORM,就可以实现简单的报表功能
Option Explicit
dim Report as New Cystal1
Private Sub Form_Load()
Screen.MousePointer = vbHourglass
'调用水晶报表时置鼠标为沙漏状 CRViewer91.ReportSource = Report '该语句的赋值将在后面被修改
CRViewer91.ViewReport
Screen.MousePointer = vbDefault '调用水晶报表完成后置鼠标为默认形状
End Sub
Private Sub Form_Resize()
CRViewer91.Top = 0
CRViewer91.Left = 0
CRViewer91.Height = ScaleHeight
CRViewer91.Width = ScaleWidth
End Sub
提供一种方案,使分页浏览的报表每页只显示N条记录,最后一页记录条数不足N的,用空行补齐。
示例:
记录共7条,每页显示5条记录:
下载代码(vs2008,需要安装AdventureWorks数据库)
原理:
由于表的分组包含“在起始处分页”和”在结束处分页”的功能,所以我们考虑先将数据分成若干个记录条数为N的组,
再启用“在结束处分页”的功能。
那么,如何分组呢?考虑记录的下标为 0,1,2,3... 的自然数序列,用下标除以N(设为3),得到以下数列:
0 /3 取整:0
1 /3 取整:0
2 /3 取整:0
3 /3 取整:1
4 /3 取整:1
5 /3 取整:1
6 /3 取整:2
所以,我们可以以下标除以3的商的整数值对数据进行分组,则每个分组包含3条数据。当记录条数不能被3整除时,最后一个分组会不足3。分组表达式为 =Int((RowNumber(Nothing) - 1) / N)。
另一个需要考虑的问题是,最后一个分组的记录条数可能不足N,怎样以空白行补齐它呢?考虑TableRow.Visibility.Hidden属性,可通过表达式设置它的状态。为此,我们在详细信息组内额外添加N-1行,如果检查到当前是记录的最后一组最后一条并且该组记录条数不足N时,将Hidden设为Flase;其它情况为True。
表达式为=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() = r,False,True)。其中r从1开始递增。
实现:
1.新建WinForm项目,用报表向导添加一张报表,数据源为AdventureWorksDataSet的Employee数据库表,调整详细信息(这里只选择了表内前面7条数据):
2.(以下都是在报表的设计模式中)在表内添加组,分组表达式为 =Int((RowNumber(Nothing) - 1) / 3),取消包括组头和包括组尾,勾选在结尾处分页:
3.连续插入两行:
4.选择插入的第一行(TableRow3),在Visibility的Hidden属性下选择“表达式”,在打开的文本框内填入
=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() = 1, False, True);同理,在插入的第二行(TableRow4)同位置填入
=IIf(RowNumber(Nothing) = CountRows("table1") AndAlso CountRows() = 2, False, True):
5.运行程序,可以看到前两页分别只有3条记录,最后一页1条,空白处用空行补齐了:
以MSServer自带Northwind库文件内的Customers及Orders这两个表为例,建立两个报表文件,在查询得出Customers的表数据后,点击此表内的CustomerID数据,报表将转入至下一个报表,并显示与之相关的Orders的数据,即VS中所谓的钻取式报表。
1、打开一个工程,并新建一个From,放入一个Button及一个ReportViewer控件。
2、在工程内新建一个数据源,连接到Northwind库文件,显示Customers及Orders这两个表
3、新建一个报表文件,并以表格的形式来显示数据,将Customers表内的CustomerID、CompanyName及Address三个字段放入,形成一份有表头及数据的简单报表,并将此报表保存命名为customerReport
4、再建一个报表文件,与customerReport相同,也以表格的形式来显示报表,将Orders内的OrderID、CustomerID、ShipName及OrderDate四个字段放入表格内,报表保存为orderReport
5、orderReport的数据源根据主报表customerReport的数据来确定数据源的数据,查看表格的数据集名称,我的显示为NorthwindDataSet_Orders,也可以自己另建一个,具体方法见我的《RDLC报表(二)》
6、再打开customerReport报表,将CustomerID设置成为可点击的索引字段,以便转入下一个报表。选择CustomerID字段,按鼠标右键,在”文本框属性“窗口中,选择”导航“选项卡,在下面的”超链接“中选择”跳至报表“,在报表名称中选择”orderReport“,再按下后面的”参数...“按钮,输入一个参数名称,如customerid,参数值选择=Fields!CustomerID.Value。为了与其它数据相区分,可以将此列数据根据自己的习惯改变颜色或加下划线
7、在orderReport中,设置一个报表参数,与CurtomerReprot中的名称相同,以接收父表中传入的参数
8、新建两个取得数据的方法,一个从Customers中取得数据集,另一个从Orders中取得数据集,且带参数。此两个方法可以自己编写类库来实现,也可以在VS的数据集内添加。为了演示方便,我直接使用了Customers的GetData(),并编写了一个Orders的GetDataByCustomerID(@cid)的方法。
9、在From的Button中编写如下代码:
private void button2_Click(object sender, EventArgs e)
{
NorthwindDataSet.CustomersDataTable dt1 = new NorthwindDataSetTableAdapters.CustomersTableAdapter().GetData();
this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.customerReport.rdlc";
this.reportViewer1.LocalReport.DataSources.Clear();
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Customers", dt1));
this.reportViewer1.RefreshReport();
}
10、使用报表的Drillthrough事件,当选择了钻取项时会发生此事件,给下一个报表取值,代码如下:
private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
{
LocalReport lp = (LocalReport)e.Report;
string customerid = lp.GetParameters()["customerid"].Values[0].Trim();
lp.DataSources.Clear();
lp.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders",
new NorthwindDataSetTableAdapters.OrdersTableAdapter().GetDataByCustomerID(customerid)));
}