`
webcode
  • 浏览: 6070172 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ASP.NET中实时图表的实现

 
阅读更多
在对大批量的数据进行分析比较时,最常用也是最直观明了的表现方法莫过于绘制趋势图表。一般情况下,我们利用Excel制作各种类型的趋势图表,但它们都是基于静态数据的,即数据是事先整理好的而不 是动态生成的。如果在网上发布,只能将绘制好的图表以静态GIF图像发布,这无法从根本上满足不同用户对不同数据的需求。

ASP擅长服务器端的Web编程,操作后台数据库更是它的强项。但是用ASP制作实时数据库图表有点困难,因为ASP本身并不支持图表功能,只能借助第三方控件进行开发,如VB的MSChart控件。微软推出的.NET Framework较好地解决了这个问题。微软在.NET平台上集成了实时数据库图表制作组件—OWC(Microsoft Office Web Components)。通过在ASP.NET页面中调用OWC,我们可以轻松地绘制出各种类型的实时图表。OWC支持近50种图表类型,包括曲线图、折线图、柱状图、面积图、K线图等。与MSChart相比,OWC功能强大,操作简单。此外,由于OWC是基于服务端的,而MSChart只能应用在客户端,因此在服务器端的Web开发中,MSChart要比OWC逊色不少。

下面笔者将结合实例来具体阐述OWC在ASP.NET页面中的应用,这个实例是笔者开发的项目《化纤产品及其原料市场分析系统》中的一个子系统,笔者在该项目中用到OWC,充分享受到了OWC的强大功能给开发工作带来的方便。

三层结构

系统整体架构采用了B/S三层结构模式,将系统分为用户界面层(也称为表现层)、业务逻辑层(也称为功能层)和数据库服务层(也称为数据层),开发平台则采用了.NET Framework,有效地降低了系统对客户机的要求,避免了在客户机上分发应用程序与版本控制的困难。

● 用户界面层: 用户界面采用的是ASP.NET技术。ASP.NET技术的应用增强了系统的通用性,客户端只需安装IE或Netscape等任一款浏览器,无需加载任何组件。

● 业务逻辑层: 采用了.NET Framework调用OWC的技术,能够根据用户的要求快速取得数据库中的数据动态生成图表。系统能够支持复杂的检索条件,检索速度快,响应时间短。

● 数据库服务层:数据库服务层可采用任何一款关系型数据库。在本项目中,笔者使用的是SQL Server,它能与.NET Framework无缝集成。数据库存取技术则采用了ADO.NET。

下文我们将着重介绍业务逻辑层的实现方法。

图表元素简介

一张完整的图表由若干个元素组成,我们必须对它们有所了解,才能随心所欲、充分自如地对图表进行全方位的控制,也才能更好地理解本程序。笔者制作了一张简易的图表,在图中标注了程序涉及到的主要部位和元素的名称,借此帮助读者掌握OWC以及理解本文所引用的代码。

使用OWC组件

在这一节里所涉及的源代码摘自于《化纤产品及其原料市场分析系统》,该系统在Window 2000/XP简体中文专业版、.NET Framewrok 1 .0环境下通过。使用OWC组件的步骤如下:

1. 在当前目录中新建一个存放图表文件的子目录chart,同时把对该目录的“修改”权限赋予ASP.NET账户。具体步骤如下:用鼠标右键单击chart目录名,选择“属性”菜单项,在弹出的“Chart”属性对话框中单击“安全”选项卡,再单击“添加”按钮,找到ASP.NET账户,赋予“修改”权限,单击“确定”按钮结束。这样,ASP.NET就可以在chart目录中写入图表文件了。

2. 定义一个服务器端的Image图像控件,该图像的属性imageURL将在程序末尾被指向动态生成的图表文件,因此在这里无需为它赋值。

< asp:image id=“imgChart” Width=“500” Height=“300” Visible=“False” Runat=“server”>< /asp:image>

3. 添加OWC引用。

在使用OWC之前,首先必须将OWC的引用加入到“解决方案资源管理器”中。具体步骤如下:打开“解决方案资源管理器”面板,鼠标右键单击“引用”,选择“添加引用”菜单,在弹出的“添加引用”对话框中单击“COM”卡片,找到“Microsoft Office Web Components 9.0”,单击“选择”和“确定”按钮,OWC就被添加到了引用中。

4. 定义OWC空间,并在该空间中加入一个OWC图表owcChart。

Dim owcChartSpace As OWC.ChartSpace = New OWC.ChartSpace()

Dim owcChart As OWC.WCChart = owcChartSpace.Charts.Add

5. 用SQL检索条件进行数据库检索,并将检索结果以RecordSet数据集的方式赋给owcChart。

OWC只支持RecordSet数据集,不支持DataSet数据集,因此在检索时不能使用sqlCommand、sqlDataAdapter等对象,只能使用RecordSet对象进行检索。

’打开connection连接

ConnADO.Open(connectionString)

RecordsetADO.ActiveConnection = ConnADO

’设置游标为静态游标

RecordsetADO.CursorType = ADODB.CursorTypeEnum.adOpenStatic

RecordsetADO.CursorLocation = ADODB.CursorLocationEnum.adUseClient

’变量strSQL中存放了标准SQL检索条件

RecordsetADO.Open(strSQL)

然后将RecordSet数据集赋给OWC对象:

owcChartSpace.DataSource = RecordsetADO

在本例中,我们假定用SQL语句检索出的数据共有三个字段:产品、日期和价格。这三个字段的值分别与图表中的曲线、分类(X)轴和数值(Y)轴的数据一一对应。

6. 确定曲线类型,并确定区别不同曲线的字段名。

首先确定曲线类型为平滑曲线。

owcChart.Type = OWC.ChartChartTypeEnum.chChartTypeSmoothLine

OWC支持在同一张图表中显示两条以上的曲线。因此我们必须给出区别不同曲线的依据,这个依据就是“产品”字段的取值。具体地说,“产品”字段中有几个不同的取值,就会生成几条不同的曲线。

owcChart.SetData(OWC.ChartDimensionsEnum.chDimSeriesNames, 0, “产品”)

7. 确定分类(X)轴标签与数值(Y)轴标签所对应的字段。

首先需要定义owcSeries为OWC的曲线集合,然后遍历图表中的每一条曲线,将“日期”字段的值赋给分类(X)轴作为X轴刻度标签,将“价格”字段的值赋给数值(Y)轴作为Y轴刻度标签。如果我们能够确定图表中只有一条曲线,也可以省略遍历的过程,但这样无疑会降低程序的通用性。

Dim owcSeries As OWC.WCSeries

For Each owcSeries In owcChart.SeriesCollection

owcSeries.SetData(OWC.ChartDimensionsEnum.chDimCategories, 0, “日期”)

owcSeries.SetData(OWC.ChartDimensionsEnum.chDimValues, 0, “价格”)

Next

8. 对坐标轴的属性进行设置。

这部分代码通过对坐标轴标题的文字内容、颜色、大小、主要和次要刻度线及其标签、主要和次要网络线等方面的设置美化图表。读者如果对本段代码中的概念有些模糊,可以参考前一部分提供的那张图表。具体设置方法请参见以下代码。

’先定义axis为坐标轴集合

Dim axis As OWC.WCAxis

’遍历坐标轴集合

For Each axis In owcChart.Axes

’显示轴标题

axis.HasTitle = True

’先对分类(X)轴进行设置

If axis.Type=OWC.ChartAxisTypeEnum.

chCategoryAxis Then

axis.HasTickLabels = True

’显示X轴刻度标签

axis.Position = OWC.ChartAxisPositionEnum.chAxisPositionBottom

’标签的显示位置

axis.Title.Font.Color =”blue”

’X轴的标题文字颜色

axis.Title.Font.Size = “9”

’X轴的标题文字大小

axis.Title.Caption = “日期范围”

’X轴的标题文字内容

Else

’对数值(Y)轴进行设置

axis.MajorGridlines.Line.Color = “silver”

’Y轴主要网络线的颜色

axis.MajorTickMarks = OWC.ChartTickMarkEnum.chTickMarkNone

’不显示Y轴主要刻度标记

axis.HasTickLabels = True

’显示Y轴刻度标签

axis.Title.Font.Color = “blue”

’Y轴的标题文字颜色

axis.Title.Font.Size = “9”

’Y轴的标题文字大小

axis.Title.Caption=“价格(千元/吨)”

’Y轴的标题文字内容

End If

Next

9. 以GIF图像格式输出图表,并将图像文件名赋给Image控件。

’用随机数来生成随机文件名

Randomize()

Dim nFileNameSuffix As Integer

Dim sFileNameSuffix As String

nFileNameSuffix = 100000 * Rnd()

sFileNameSuffix = System.Convert.ToString(nFileNameSuffix)

’以GIF格式输出图表,大小为500*300,图表的文件名为:polyesterprice_随机数.gif,存放在chart子目录中

owcChartSpace.ExportPicture(MapPath(“chart/PolyesterPrice_”) + sFileNameSuffix + “.gif”, “gif”, 500, 300)

’将Image控件的URL指向该图表文件

imgChart.ImageUrl=“chart/PolyesterPrice_” + sFileNameSuffix + “.gif”

通过以上九个步骤,我们就完成了一个实时数据库图表的生成与显示。在此需要指出的是,以上的九个步骤只是生成一张图表必不可少的基本过程,通过设置OWC的其他属性可以更好、更精确地控制图表的生成与显示方式,如图例、线条的粗细与颜色、坐标轴刻度线及标签的显示频度、网络线等。这部分笔者不再介绍,请参见本文第四部分的源代码。

优化

上文中所有实时生成的图表文件都存放在chart文件夹中,由于采用了随机文件名的方式,因此这些文件不会互相覆盖。但是如此日积月累,越来越多的文件不仅占用了硬盘空 间,也妨碍了管理,降低了性能。我们能不能在程序中自动删除以前的图表文件呢?答案是肯定的。我们只要在代码文件的Page_Load()函数中放置如下一段代码,程序运行的时候,就会自动删除当日以前的文件。这样,chart文件夹中存放的就总是当日生成的图表文件,从而有效地避免了文件垃圾。

’先取得chart文件夹中的文件列表

Dim fileEntries() As String = System.IO.Directory.GetFiles(MapPath(“chart”))

Dim sFile As String

’遍历文件列表

For Each sFile In fileEntries

’将文件的生成日期与系统日期相比,如果是当日以前生成的文件,删除它

If DateTime.Compare(System.IO.File.GetCreationTime(sFile).AddDays(1), DateTime.Now) < 0 Then

System.IO.File.Delete(sFile)

End If

Next

虽然用OWC生成的图表功能齐全,界面美观,但它也存在着不少的缺陷。首先,OWC不支持DataSet数据集,这样我们就无法在生成图表的同时使用DataGrid显示数据表,除非我们用循环依次取出Recordset记录集中的全部数据手工生成表格,或用同样的检索条件对数据库进行二次检索,但这无疑要增加服务器的负担。其次,在同一张图表中绘制的曲线只能是同一种类型,或同为平滑曲线图,或同为柱状图,它不能在同一张图表中显示不同类型的曲线。最后,在某些细节方面,如分类(X)轴的设置方面,OWC无法提供更加详细、人性化的设置途径。如果读者要追求更强大的功能和更好的显示效果,笔者向您推荐两个专业的基于.NET的图表控件,这两个控件分别由Dundas和Softwarefx公司出品,都同时支持Web Form和Win Form开发,只是这两个控件都是付费的。读者如果有兴趣,可以到它们的网站去下载DEMO版本,以亲身体验一下专业图表控件带来的强大功能。

分享到:
评论

相关推荐

    asp.net 图表 c#图表 chart 统计图(c#版含实例)

    "asp.net 图表 c#图表 chart 统计图(c#版含实例)"这个主题,主要涵盖了如何在ASP.NET应用中使用C#语言创建和操作图表,特别是统计图。 统计图是一种图形表示,它能够清晰地展示数据的分布、趋势和关系。在ASP.NET...

    ASP.Net实现SQL动态绑定Echarts图表Demo完整源码

    【ASP.Net实现SQL动态绑定Echarts图表Demo完整源码】是一个示例项目,它演示了如何在ASP.Net环境中结合Echarts图表库、C#、SQL和JSON技术来动态展示数据库中的数据。该项目的核心目标是利用后端服务器处理程序获取...

    Asp,Asp.net 的 Chart图表控件

    在ASP和ASP.NET框架中,Microsoft提供了内置的Chart控件,使得开发者可以方便地创建各种复杂的图表,如线性图、饼状图和柱状图等。本文将深入探讨这个强大的图表工具,包括其功能、使用方法以及示例。 ### 1. Chart...

    ASP.NET动态生成图表范例

    ASP.NET动态生成图表范例 语言c#

    asp.net与统计图表

    3. 定义图表系列:每个系列代表图表中的一组数据,例如在柱状图中,每个柱子代表一个系列。Series对象用于定义这些系列,可以设置其名称、数据源、X轴和Y轴的字段等。 4. 设置图表区域和轴:ChartArea对象定义了...

    ASP.Net的图表控件

    ASP.NET的图表控件是微软开发的Web应用程序中用于数据可视化的重要工具,它允许...在实际项目中,柱状图和饼图只是基础,ASP.NET图表控件还支持线图、散点图、区域图等多种图表类型,能满足各种数据分析和展示的需求。

    ASP.NET 生成图表

    在ASP.NET中,生成图表是一项常用的功能,它可以帮助开发者以可视化的方式展示数据,如统计数据、趋势分析或者复杂的业务指标。图表的生成对于数据分析和决策支持至关重要,因为它们能够使用户快速理解和消化大量...

    ASP.NET中JS脚本,在简易聊天室中范例,ASP.NET动态生成图表范例,验证码范例

    此包包含ASP.NET中使用JS脚本范例.rar Application在简易聊天室中的应用范例.rar ASP.NET动态生成图表范例.rar ASP.NET验证码范例.rar 希望对大家有所帮助

    asp.net 图表控件

    ASP.NET图表控件是.NET Framework下用于创建动态、交互式数据可视化的一种工具。它允许开发者在Web应用程序中生成各种图表,如柱状图、折线图、饼图、散点图等,以便于数据的展示和分析。这些控件通常包含在ASP.NET...

    ASP.NET与Echarts实现前后端数据的交互

    在"ASP.NET与Echarts实现前后端数据的交互"这个主题中,核心是利用ASP.NET后端处理数据,并通过Echarts前端展示。具体步骤如下: 1. **后端数据处理**:在ASP.NET中,你可以使用ADO.NET或Entity Framework等库来...

    asp.net中flash图表控件FusionChart的封装

    asp.net中flash图表控件FusionChart的封装

    ASP.NET中实时图表的实现方法分享

    但是用ASP制作实时数据库图表有点困难,因为ASP本身并不支持图表功能,只能借助第三方控件进行开发,如VB的MSChart控件。微软推出的.NET Framework较好地解决了这个问题。微软在.NET平台上集成了实时数据库图表制作...

    【ASP.NET编程知识】ASP.NET MVC中图表控件的使用方法.docx

    ASP.NET MVC中图表控件的使用方法 本文介绍了如何在ASP.NET MVC中使用图表控件,以便在Web应用程序中显示丰富的图表信息。该文章将指导读者如何使用Microsoft图表控件在ASP.NET MVC中创建丰富的图表,包括柱形图、...

    ASP.NET页面中实现数据棒图

    在我的上一篇文章《在ASP.NET实现数据图表》中已经介绍了在浏览器看到的图表,一般都是图片文件。那么在ASP.NET中是否也可以生成这些图表?答案是肯定的,因为在ASP.NET中拥有了一个新功能--绘图功能,通过此功能就...

    ASP.NET用OWC绘图控件实现统计图表代码

    以下将详细介绍如何利用OWC控件在ASP.NET中实现统计图表的代码实践。 首先,需要在ASP.NET页面中添加OWC控件。这通常通过添加`&lt;OBJECT&gt;`标签来完成,设置相应的属性如`id`、`classid`、`codebase`等,确保控件能够...

    ASP.NET绑定sql数据库采用echarts显示数据图表(实现了柱状图和饼图).zip

    在这个项目中,开发者使用ASP.NET技术来实现从SQL数据库中获取数据,并通过ECharts这个强大的JavaScript数据可视化库来展示这些数据。ECharts是百度开发的一个轻量级、高性能的图表库,支持丰富的图表类型,如柱状图...

    asp.net图表制作

    ASP.NET图表制作是一种在Web应用中创建数据可视化的方法,它能够帮助开发者生成各种类型的图表,如柱状图、饼图、线形图、散点图等,以直观地展示复杂的数据。在描述中提到的“非常好用的图表制作”,表明这个解决...

    asp.net 统计图表

    asp.net 统计图表,直方图、曲线图、散点图等形状可以自行设置

    Asp.net图表控件

    Chartlet是一个免费的ASP.NET使用的图表控件,它让你可以用最少的代码创造出非常漂亮的统计图表,我们的宗旨是让你的使用越简单越好,现在你只需要设置一个属性,绑定一个数据源 就可以轻松创建一个非常漂亮的图表!...

    asp.net flash图表控件

    ASP.NET Flash图表控件是一种用于在Web应用中创建动态、交互式图表的工具,它结合了ASP.NET的强大功能和Flash的视觉吸引力。OpenFlashChart是一个流行的开源库,用于生成高质量的图表,它提供了丰富的定制选项,使...

Global site tag (gtag.js) - Google Analytics