第一篇:C#NET使用DotNetCharting控件生成报表统计图总结
.NET使用DotNetCharting控件生成报表统计图总结
在做项目时要对数据进行统计分析,所以必须生成一些报表统计图(如柱形图、饼图、曲线图等),网上强烈推荐了使用DotNetCharting控件来实现,于是自己对DotNetCharting控件进行了简单的学习,下面先简单介绍一下DotNetCharting控件及其使用。
DotNetCharting是一个非常棒的.NET图表控件,对中文支持非常好,而且操作方便,开发快速,既有for webform 也有for winform的,而且.net1.1和2.0都有支持。它的官方地址是http://..dotnetcharting../
本站也提供了DotNetCharting破解版本下载: 附件: dotnetCHARTING.rar(下载 36 次)
强烈推荐一下DotNetCharting的demo地址:
这个是所有的 DEMO 演示
http://..dotnetcharting../demo.aspx
这个是 Online Documentation http://..dotnetcharting../documentation/v4_4/webframe.html 里面会有详细的说明和用法。
DotNetCharting的简单使用方法:
1.把bindotnetCHARTING.dll添加到工具箱,并且添加引用;
2.把控件拖到你的网页上,然后添加引用using dotnetCHARTING;就可以用了;
3.接下来是自己写的对DotNetCharting操作的封装类,以便于在程序里调用。
ShowData.cs 1.using System;2.using System.Data;3.using System.Text;4.using dotnetCHARTING;5.6.namespace FLX..plexQuery 7.{ 8./**////
9./// 彭建军
10./// 根据数据动态生成图形(柱形图、饼图、曲线图)11./// 2008-06-19 12./// 13.public class ShowData 14.{ 15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.属性#region 属性
图片存放路径图片标题 图片x座标名称 图片y座标名称 图例名称 图片宽度 图片高度 图片数据源 图片存放路径
set{_phaysicalimagepath=value;} get{return _phaysicalimagepath;} 图片标题
set{_title=value;} get{return _title;} private string _phaysicalimagepath;// private string _title;// private string _xtitle;// private string _ytitle;// private string _seriesname;// private int _picwidth;// private int _pichight;// private DataTable _dt;// /**////
} /**////
set{_ytitle=value;} get{return _ytitle;} 图例名称
set{_seriesname=value;} get{return _seriesname;} 图片宽度
set{_picwidth=value;} get{return _picwidth;} } /**////
} /**////
} /**////
} 75./**////
_phaysicalimagepath=PhaysicalImagePath;
_title=Title;
_xtitle=XTitle;
_ytitle=YTitle;107.108.109.110.111.112.113.114.115._seriesname=SeriesName;
}
#endregion
输出柱形图#region 输出柱形图
/**////
/// 柱形图
///
///
chart.Title=this._title;
chart.XAxis.Label.Text=this._xtitle;
chart.YAxis.Label.Text=this._ytitle;121.chart.TempDirectory =this._phaysicalimagepath;
122.123.chart.Width = this._picwidth;
chart.Height = this._pichight;124.chart.Type = ChartType..bo;
125.chart.Series.Type =SeriesType.Cylinder;126.chart.Series.Name = this._seriesname;
127.128.chart.Series.Data = this._dt;
chart.SeriesCollection.Add();
129.chart.DefaultSeries.DefaultElement.ShowValue = true;
130.131.chart.ShadingEffect = true;
chart.Use3D = false;
132.chart.Series.DefaultElement.ShowValue =true;133.134.135.}
#endregion 136.137.138.139.140.输出饼图#region 输出饼图
/**////
/// 饼图
///
///
chart.Title=this._title;
144.chart.TempDirectory =this._phaysicalimagepath;
145.146.chart.Width = this._picwidth;
chart.Height = this._pichight;147.chart.Type = ChartType.Pie;
148.chart.Series.Type =SeriesType.Cylinder;149.chart.Series.Name = this._seriesname;
150.151.152.chart.ShadingEffect = true;
chart.Use3D = false;
153.chart.DefaultSeries.DefaultElement.Transparency = 20;154.chart.DefaultSeries.DefaultElement.ShowValue = true;155.chart.PieLabelMode = PieLabelMode.Outside;
156.chart.SeriesCollection.Add(getArrayData());157.chart.Series.DefaultElement.ShowValue = true;158.159.160.161.}
private SeriesCollection getArrayData()
{ 162.SeriesCollection SC = new SeriesCollection();163.164.165.166.167.DataTable dt = this._dt;
for(int i=0;i < dt.Rows.Count;i++)
{
Series s = new Series();168.s.Name = dt.Rows[0].ToString();
169.170.171.172.173.174.175.Element e = new Element();
// 每元素的名称
e.Name = dt.Rows[0].ToString();
// 每元素的大小数值
176.e.YValue=Convert.ToInt32(dt.Rows[1].ToString());177.178.179.180.181.182.183.184.185.186.187.188.189.s.Elements.Add(e);
SC.Add(s);
}
return SC;
}
#endregion
输出曲线图#region 输出曲线图
/**////
/// 曲线图
///
///
chart.Title=this._title;
193.194.chart.XAxis.Label.Text=this._xtitle;
chart.YAxis.Label.Text=this._ytitle;195.chart.TempDirectory =this._phaysicalimagepath;
196.197.chart.Width = this._picwidth;
chart.Height = this._pichight;198.chart.Type = ChartType..bo;
199.chart.Series.Type =SeriesType.Line;200.chart.Series.Name = this._seriesname;
201.202.chart.Series.Data = this._dt;
chart.SeriesCollection.Add();
203.chart.DefaultSeries.DefaultElement.ShowValue = true;
204.205.chart.ShadingEffect = true;
chart.Use3D = false;
206.chart.Series.DefaultElement.ShowValue =true;207.208.209.210.}
#endregion
调用说明及范例#region 调用说明及范例
211.//
在要显示统计图的页面代码直接调用,方法类似如下: 212.213.214.215.216.217.218.219.220.221.// //
ShowData show=new ShowData();//
show.Title =“2008年各月消费情况统计”;//
show.XTitle =“月份”;//
show.YTitle =“金额(万元)”;//
show.PicHight =300;//
show.PicWidth =600;//
show.SeriesName =“具体详情”;//
show.PhaysicalImagePath =“ChartImages”;//
show.DataSource =this.GetDataSource();222.223.224.225.226.//
show.CreateColumn(this.Chart1);
#endregion
} } 复制代码 效果图展示:
1、饼图
2、柱形图
3、曲线图
补充:
帖子发了一天,没人回答我多维统计图的实现方式,只好自己去dotnetcharting的官方网站下载了最新的dotnetcharting控件,在 dotnetcharting控件的使用说明文档中详细地介绍了各种多维统计图的实现方式。现把说明文档贴出来供大家下载
dotnetcharting使用说明文档:附件: dotnetcharting使用说明.rar(下载 38 次)
追加补充新内容:
1、解决“每运行一次DotNetCharting页面,就会生成一个图片,这样图片不是越来越多吗?请问怎样自动删除DotNetCharting生成的图片呢”的问题,参照 ASP.NET删除文件夹里的所有文件。
2、解决“(1)生成的图片带超链接导向官网,如何处理呀?(2)我使用这个控件后,图形可以显示出来。但是发现一个小问题。就是在图形的左上方和图形的下面都隐含了超链接,鼠标移动到这两个区域后,点击都会链接到http://..dotnetcharting../。很奇怪,这是和破解有管吗?”等类似的问题,参照 DotnetCharting控件的破解方法。
第二篇:有关水晶报表的使用经验和总结(范文模版)
有关水晶报表的使用经验和总结
Asp.Net(webform)中使用水晶报表
这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。为了得到最好的效果,读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Net的开发经验。
简介
水晶报表可以由很多的方法得到,其中一个就是使用VS.Net来创建,它提供了非常丰富模型以使我们能够在运行时操作属性和方法。如果你正在使用VS.Net开发.Net程序,那么你就不需要再安装其它软件了,因为他已经内嵌在VS.Net中了。
优点:
VS.Net水晶报表有下面一些主要的优点:
快速的报表开发
能够导出成为复杂的交互性图表
可以与其它控件一起在WebForm中使用
能够动态地将报表导出成为.pdf,.doc,xls,html,rtf等多种格式
结构:
一些组件组成了水晶报表的二层结构,需要的Web应用有:
客户端 :
客户端仅需要一个可以访问嵌入aspx页面报表的游览器就可以了
服务器 :
-水晶报表引擎(Crystal Report Engine(CREngine.dll))
通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。也正是因为报告引擎的作用,才可以将Asp.Net中的水晶报表转换成为普通HTML格式
-水晶报表设计器(Crystal Report Designer(CRDesigner.dll))
水晶报表就是在设计器中创建的,在设计器中你可以设计标题,插入数据,公式,图表,子报表等。
Data Source
.rpt文件取得数据库的方法取决于你方法的选择,你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装DataSet,然后再将其传送到报表文件。
-水晶报表查看控件(Crystal Report Viewer web form Control(CRWebFormViewer.dll))
水晶报表查看控件是一个WebForm控件,可以将它看成是一个在.aspx页面中存放报表的容器。
注意:在一些复杂的操作中,报表服务器与Web服务器可能不在同一物理主机上,Web服务器将HTTP请求传送到报表服务器上去。水晶报表也可以当做WebService来执行。
执行模式
水晶报表取数据可以使用下面的方法实现:
-Pull 模式:
被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据。
-Push 模式 :
此时开发表不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化。
报表类型:
水晶报表设计器能够直接包含报表至工程也能够使用独立的报表对象。
-Strongly-typed 报表 :
当你将报表文件加入到项目中去时,它就变成了一个了“ strongly-typed“报表。在这些情况下,你将拥有直接创建报表的对象的权力,这将减少一些代码并且能够提供一些性能。
-Un-Typed 报表 :
这里的报表并不直接包含在项目中,因此称为'un-typed’ 报表。在这种情况下,你不得不使用水晶报表的”ReportDocuemt“对象建立一个实例,并且”手动“地凋用报表。
其它注意事项
尽管水晶报表查看器拥有一些很酷的功能,如缩放、页面导航等。但是他不提供打印功能,你不得不调用游览器的打印功能。
VS.Net中的水晶报表如果没有注册,那么它只能使用30次,30次后,”保存“功能就不能再使用了。为了避免这个,你不是不在 http://(Hyper Text Markup Language – 3.2 or 4.0 compliant)
4.5.RTF(Rich Text Format)使用Pull模式导出报表
当导出使用Pull模式创建的文件时,水晶报表准确地打开所需要的数据,下面是执行导出功能的代码:
C#代码: VB.Net代码: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
Dim myReport As CrystalReport1 = New CrystalReport1()
'注意:这里我们建立一个strong-typed的水晶报表实例。
Dim DiskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = New CrystalDecisions.Shared.DiskFileDestinationOptions()
myReport.ExportOptions.ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
' 导出成为其它文件时也需要这个选项
' 如Microsoft Exchange, MAPI等.myReport.ExportOptions.ExportFormatType [Shared].ExportFormatType.PortableDocFormat
= CrystalDecisions.'这里我们导出成为.pdf格式文件,你也能选择上面的其它类型文件
DiskOpts.DiskFileName = “c:Output.pdf”
'如果你不指定确切的目录,那么文件就会保存到[Windows]System32目录中去了
myReport.ExportOptions.DestinationOptions = DiskOpts
'水晶报表文件不包含直接的FileName属性,因此你不能直接指定保存的文件名
'所以你不得不使用DiskFileDestinationOptions对象,设置它的DiskFileName属性
'为你想要的路径,最后将水晶报表的DestinationsOptions属性指定为上面的DiskFileDestinationOption
myReport.Export()
'上面的代码将完成导出工作。End Sub
使用PUSH模式导出水晶报表
当导出的报表是由PUSH模式建立的时,第一步就是通过编程建立连接并组装DataSet,设置报表的的SetDataSource属性。再下面的步骤就有Pull模式一样的了。[/HTML].NET环境下水晶报表使用总结
水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。
一、在使用自带的水晶报表时,请注册,否则只能使用30次 水晶报表注册码 注册号:6707437608 密码:AAP5GKS0000GDE100DS
二、使用CrystalReportViewer进行预览
CrystalReportViewer控件允许在应用程序中查看 Crystal Report。ReportSource 属性用于设置要查看哪个报表。该属性设置之后,报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径,也可以是强类型报表。1.打开“工具箱”,并将一个 CrystalReportViewer 拖到窗体上,我们命名为rptVew。
2.通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。
3.当运行应用程序时,报表将显示在查看器中。
三、创建新报表
1.指向“添加”,单击“添加新项”。
2.在“添加新项”对话框中,从“模板”区域选择 Crystal Report,将报表命名为rptClient,单击“打开”。
3.在 Crystal Report 库中,选择下列选项之一:
·
使用报表专家 — 指导您完成报表的创建过程,并将您的选择添加到 Crystal Report Designer。
·
作为空白报表 — 打开 Crystal Report Designer。
·
来自于现有的报表 — 创建新报表,它与指定的另一报表设计相同。
注意
Crystal Report 库包含许多专家,可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表,以确定哪种报表构造方法适合您的需要。4.单击“确定”按钮。
如果选择使用“报表专家”,便会出现“报表专家”对话框,并带有数据资源管理器。为每个文件夹选择所需数据,完成“报表专家”选项卡界面上的操作,然后单击“完成”来访问 Crystal Report Designer 和您的报表
四、是否需要动态设置数据源?
Crystal Reports 通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。
拉和推模型
为了向开发人员提供最灵活的数据访问方法,Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。
拉模型
在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。推模型
相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。
四、从 ADO.NET 数据集制作报表 从数据库创建数据集对象
1.在项目中新建一个架构文件:
a.在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”。
b.在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”。
c.在“模板”区域选择“数据集”。
d.接受默认名称 Dataset1.xsd。
这就创建了一个新的架构文件(Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。
2.指定数据库位置:
a.在服务器资源管理器中,右击“数据连接”并选择“添加连接”。
b.在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server)。
c.单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。
d.单击“确定”按钮。
此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。
3.在解决方案资源管理器中,双击 Dataset1.xsd(如果它尚不是活动视图)。
Dataset1.xsd 现在应显示在“数据集”选项卡中。
4.若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。
5.单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。
6.在“生成”菜单上,单击“生成”为项目生成数据集对象。
ADO.NET 数据集对象提供数据的描述,从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。
请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”,请在 Report Designer 中右击,指向“数据库”,然后单击“添加/删除数据库”。
将报表连接到 ADO.NET 数据集对象
1.在“数据库专家”中,展开“项目数据”文件夹。
2.展开“ADO.NET 数据集”文件夹。
3.选择所需数据集对象。
例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”。
4.选择要向报表中添加的表,和使用其他数据源一样。
五、动态改变数据源的代码
Dim dsdataSet As New DataSet()
Dim oRpt As New rptClient()
'已建立的报表rptClient
请读者自行填充数据集dsdataSet
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet.Tables(0))
' 将带有数据的报表对象绑定到 Windows 窗体查看器,rptVew(CrystalReportViewer控件)
rptVew.ReportSource = oRpt 注意
FillDataSet 方法可连接到指定的数据库,提取数据,然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中,请使用 SQL JOIN 语句将这些表联接在一起;然后在 FillDataSet 方法中指定一个结果表
六、创建主从报表
在报表中,有许多报表是主从表结构,比如订单与订单商品明细,订单是一个表中的一条记录,而分录是另一个表中的多条记录,两个表通过一个字段关联起来,这种报表可利用其分
组功能实现,1.新建一个工程
2.往FORM1中添加一个CrystalReportViewer控件
3.在服务噐资源管理器中连接到SQL SERVER 2000上的Northwind数据库
4.添加一个数据集Dataset1,将服务器资源管理器中的Orders和 Order Details加入到数据集中。
5.添加一个水晶报表,使用报表专家,在项目数据中选择“ADO.NET数据集”,插入表Orders和 Order Details,“链接”中是关联字段的链接,在“字段”中选择要显示的主表和明细表的字段,组中选择分组依据为Orders表OrdersID字段,总计,图表,选择(可进行筛选),样式(可设置报表标题),可自行设置。设置完后,点击完成。6.在报表设计器中调整需要显示的字段的位置、宽度等。7.在窗口中添加代码。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load
Dim oRpt As New CrystalReport1()
Dim dsdataSet As New Dataset1()
Dim CN As New Data.SqlClient.SqlConnection(“data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa”)
CN.Open()
Dim daOrders As New Data.SqlClient.SqlDataAdapter(“select * from orders”, CN)
daOrders.Fill(dsdataSet, “orders”)
Dim daDetails As New Data.SqlClient.SqlDataAdapter(“select * from [Order Details]”, CN)
daDetails.Fill(dsdataSet, “Order Details”)
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource = oRpt
End Sub
8、运行程序
七、用程序改变报表中text的文本 代码如下:
Dim GetTextObject As TextObject
' 按名称获取 ReportObject,将其转换为 TextObject,并返回此对象。
GetTextObject = orpt.ReportDefinition.ReportObjects.Item(“text13”)
GetTextObject.Text = “XXXX系统”
总结:水晶报表具有非常强大的功能,还可进行导出WORD、EXCEL、RTF等文件,还可生成复杂、漂亮图表,是进行WEB和WINDOWS报表开发的利器。
第三篇:U8自定义报表使用技巧总结
自定义报表使用技巧总结
对于一标准版软件而言,更多地关注客户的共性,因而在某种程度上而言,不能满足客户的个性需求。而自定义报表在正是解决这一矛盾的有力工具。
本人在上期实施过程中,通过对自定义报变进行了深入详尽的学习,基本上能满足离散性机加工行业繁琐的日常报表需求,为项目的顺利验收作出一定贡献。
以下为本人的少许经验:
1. 数据量少且前台有表采用自定义报表中自带的设计模板:
自定义报表制作模板类似于ms-sql的视图管理,是通过在自定义报表模板中的拖拽很容易得到脚本,但是自定义报表也存在模板修改困难,并且自定义报表模板中字段不全,因而实际操控性能并不强。据我分析自定义报表实际就是ms-sql的外层执行程序,是将sql执行的结果以表格的形式表现出来。经尝试发现U8系列自定义报表可以直接执行sql语句。这样做好处很多,既可以使得自定义报表可以和sql中所使用的库完全无缝连接,也可以跨库查询,甚至跨实例查询,极大的增强了自定义报表的扩展能力。
2.对于进行时间筛选的表应注意数据范围。
自定义报表条件查询实际是将临时表中的内容做where查询,因此当涉及大量起初期末以及每一时点值得时候,必须将有关该表前后的所有内容全部查出,然后在做查询。当然,这样做的数据量会很大,当服务器速度慢或者关联表过多已近表间逻辑较为复杂的情况下会造成报表反映迟钝的问题。
3.不要将大量的脚本写入自定义报表中。
当自定义报表中sql脚本最外层有大量函数或者内部有大量数据类型间转换的情况下,自定义报表的查询条件经常设置后会发生错误。因此最好将sql脚本生成视图,然后再在自定义报表中直接调用视图。这样做条件查询一般不会发生错误。
4.脚本书写过程中应多用视图。
由于ms-sql自身的原因,在多表union或者union all的情况下,会发生数据冗余,造成报表数据错误。用多视图关联的方法,可以很好解决此种矛盾。此外,由于脚本要经常修改,当采用将所有脚本写入同一脚本中后会发生修改困难的情况,往往一处修改要造成整表修改。而采用视图间多视图关联的方法可以使程序模块化,当发生某一处数据错误的时候,仅仅需要修改该模块就可以,方便修改。当然由于多视图间关联系统会自动进行脚本重新编译,因而效率会略有降低,但是一般情况下都可忍受。
5.对数据量大,逻辑复杂的脚本可以设立作业。
企业中经常有一些不需要适时数据、使用频率低但重要程度高的汇总表(例如投入产出表),当数据量的时仅仅执行脚本就需要数个小时,并且影响整个erp系统的执行效率。此时就不应该在自定义报表中直接运行该脚本,而应当将该脚本写成存储过程格式,然后再ms-sql中直接设置作业及作业时间,使得该脚本在系统空闲时间计算,并将该表示算结果写入数据库表中,然后用自定义报表直接读取该表数据,速度奇快。
当然,这样做也存在一定问题,就是不能实时得到精准数据。但是当客户系统管理员素质较
高的情况下,如果迫切需要该表的实时数据情况下,可以让其在sql查询分析其中直接执行该存储过程。
总之,以上为本人在适应自定义报表中的一点经验。当然也希望自定义报表能够做的更加完善。