您的位置:首页 > 编程语言 > ASP

在Asp.net中利用OWC11画统计图(柱状图,饼状图及线状图等)及补充--转

2007-09-29 10:55 309 查看
注:转自ERAY的专栏 http://blog.csdn.net/Eray/archive/2007/03/20/1534509.aspx
图形和图表是Web上数据表现的很好的形式,在ASP.NET,可以使用Office Web Components (OWC)来创建统计图。Office Web Component (OWC)是包含在Microsoft Office 2000中的一套组件,利用这些组件,我们可以很方便地在浏览器中或者传统的编程环境中进行数据分析和报表。比如:电子报表,图表,数据透视表等。



<%@ Page Language="vb" AutoEventWireup="false" Codebehind="OWC.aspx.vb" Inherits="kmzbs.OWC"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<HTML>

<HEAD>

<title>WebForm1</title>

<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">

<meta name="CODE_LANGUAGE" Content="C#">

<meta name="vs_defaultClientScript" content="JavaScript">

<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

</HEAD>

<body MS_POSITIONING="GridLayout">

<form id="Form1" method="post" runat="server">

<asp:placeholder id="ChartHolder" runat="server"></asp:placeholder>

</form>

</body>

</HTML>

---VB版------------------------------------------------------------

Imports System

Imports OWC11

Imports System.Web.UI

Public Class OWC

Inherits System.Web.UI.Page

Protected WithEvents ChartHolder As System.Web.UI.WebControls.PlaceHolder

#Region " Web 窗体设计器生成的代码 "

'该调用是 Web 窗体设计器所必需的。

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init

'CODEGEN: 此方法调用是 Web 窗体设计器所必需的

'不要使用代码编辑器修改它。

InitializeComponent()

End Sub

#End Region

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

'在此处放置初始化页的用户代码

'创建ChartSpace对象来放置图表

Dim objCSpace As ChartSpace = New ChartSpaceClass

'在ChartSpace对象中添加图表,Add方法返回chart对象

Dim objChart As ChChart = objCSpace.Charts.Add(0)

'指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到

objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered

'指定图表是否需要图例

objChart.HasLegend = True

'给定标题

objChart.HasTitle = True

objChart.Title.Caption = "1-6说数据分布图"

'给定x,y轴的图示说明

objChart.Axes(0).HasTitle = True

objChart.Axes(0).Title.Caption = "Y 轴 : 数量"

objChart.Axes(1).HasTitle = True

objChart.Axes(1).Title.Caption = "X 轴: 月份"

'计算数据

'*categories 和 values 可以用tab分割的字符串来表示*

Dim strSeriesName As String = "图例 1"

Dim strCategory As String = "1" + ControlChars.Tab + "2" + ControlChars.Tab _

+ "3" + ControlChars.Tab + "4" + ControlChars.Tab + "5" + ControlChars.Tab _

+ "6" + ControlChars.Tab

Dim strValue As String = "9" + ControlChars.Tab + "8" + ControlChars.Tab _

+ "4" + ControlChars.Tab + "10" + ControlChars.Tab + "12" + ControlChars.Tab _

+ "6" + ControlChars.Tab

'添加一个series

objChart.SeriesCollection.Add(0)

'给定series的名字

objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimSeriesNames, _

ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName)

'给定分类

objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimCategories, _

ChartSpecialDataSourcesEnum.chDataLiteral, strCategory)

'给定值

objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimValues, _

ChartSpecialDataSourcesEnum.chDataLiteral, strValue)

'输出成GIF文件.

Dim strAbsolutePath As String = (Server.MapPath(".")) + "\Images\test.gif"

objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350)

'创建GIF文件的相对路径.

Dim strRelativePath As String = "Images/test.gif"

'把图片添加到placeholder.

Dim strImageTag As String = "<IMG SRC='" + strRelativePath + "'/>"

ChartHolder.Controls.Add(New LiteralControl(strImageTag))

End Sub

End Class

---C#版------------------------------------------------------------------------------------

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using Microsoft.Office.Interop.Owc11;

namespace eMeng.Exam

{

/// <summary>

/// OWC 的摘要说明。

/// </summary>

public class OWCExam : System.Web.UI.Page

{

protected System.Web.UI.WebControls.PlaceHolder ChartHolder;

private void Page_Load(object sender, System.EventArgs e)

{

//创建ChartSpace对象来放置图表

Microsoft.Office.Interop.Owc11.ChartSpace objCSpace = new Microsoft.Office.Interop.Owc11.ChartSpaceClass ();

//在ChartSpace对象中添加图表,Add方法返回chart对象

Microsoft.Office.Interop.Owc11.ChChart objChart = objCSpace.Charts.Add (0);

//指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到

objChart.Type = Microsoft.Office.Interop.Owc11.ChartChartTypeEnum.chChartTypeColumnClustered;

//指定图表是否需要图例

objChart.HasLegend = true;

//给定标题

objChart.HasTitle = true;

objChart.Title.Caption= "上半年分布图";

//给定x,y轴的图示说明

objChart.Axes[0].HasTitle = true;

objChart.Axes[0].Title.Caption = "Y : 数量";

objChart.Axes[1].HasTitle = true;

objChart.Axes[1].Scaling.SplitMinimum = 200;

objChart.Axes[1].Title.Caption = "X : 月份";

//计算数据

/*categories 和 values 可以用tab分割的字符串来表示*/

string strSeriesName = "图例 1";

string strCategory = "1" + "\t" + "2" + '\t' + "3" + '\t'+"4" + '\t' + "5" + '\t' + "6" + '\t';

string strValue = "9" + "\t" + "8" + '\t' + "4" + '\t'+"10" + '\t' + "12" + '\t' + "6" + '\t';

//添加一个series

objChart.SeriesCollection.Add(0);

//给定series的名字

objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimSeriesNames,

+ (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);

//给定分类

objChart.SeriesCollection[0].SetData (Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimCategories,

+ (int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);

//给定值

objChart.SeriesCollection[0].SetData

(Microsoft.Office.Interop.Owc11.ChartDimensionsEnum.chDimValues,

(int)Microsoft.Office.Interop.Owc11.ChartSpecialDataSourcesEnum.chDataLiteral, strValue);

//输出成GIF文件.

string strAbsolutePath = (Server.MapPath(".")) + "\\test.gif";

objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350);

//创建GIF文件的相对路径.

string strRelativePath = "./test.gif";

//把图片添加到placeholder.

string strImageTag = "<IMG SRC='" + strRelativePath + "'/>";

ChartHolder.Controls.Add(new LiteralControl(strImageTag));

}

#region Web 窗体设计器生成的代码

override protected void OnInit(EventArgs e)

{

//

// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

//

InitializeComponent();

base.OnInit(e);

}

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

}

补充:

1 X轴文字改变方向:

objChart.Axes(0).Orientation = 0 '改变X轴方向为横向=1为逆时针转90度,以此类推。

2 缓存导致不刷新图片问题

本质没有解决

替代解决方法:

用Guid.NewGuid生成随机数,做为参数传给页面。如"<Img src="sdfs.gif?kkd="+Guid.NewGuid.Tostring+">"

3 数据(柱体上方)显示自己的数据

VB:

objChart.SeriesCollection(0).DataLabelsCollection(0).HasValue = True

C#:

ThisChSeries.DataLabelsCollection[0].HasValue = true;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: