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

注:转自孟子e章的http://dotnet.aspx.cc/ShowDetail.aspx?id=ADB6D011-A4AD-43A0-A8BF-3CED872A7A95

自己略有修改及补充.

图形和图表是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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值