C#处理owc chart

---------------------------------------------ASP.NET版-----------------------------
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Office.Interop.Owc11;
using System.Data.OleDb;
using System.Collections;

public partial class _Default : System.Web.UI.Page
{
   
    protected void Page_Load(object sender, EventArgs e)
    {
        DropDownList1.Items.Add("chChartTypeColumnClustered");
        DropDownList1.Items.Add("chChartTypeColumn3D");
        DropDownList1.Items.Add("chChartTypeBarClustered");
        DropDownList1.Items.Add("chChartTypeBar3D");
        DropDownList1.Items.Add("chChartTypeArea");
        DropDownList1.Items.Add("chChartTypeArea3D");
        DropDownList1.Items.Add("chChartTypeDoughnut");
        DropDownList1.Items.Add("chChartTypeLineStacked");
        DropDownList1.Items.Add("chChartTypeLine3D");
        DropDownList1.Items.Add("chChartTypeLineMarkers");
        DropDownList1.Items.Add("chChartTypePie");
        DropDownList1.Items.Add("chChartTypePie3D");
        DropDownList1.Items.Add("chChartTypeRadarSmoothLine");
        DropDownList1.Items.Add("chChartTypeSmoothLine");
        //DropDownList1.SelectedIndex = 0;
        int num = DropDownList1.SelectedIndex;
        OleDbDataReader dr = GetList("select TOP 10 OrderDate,ShipVia from orders order by orderid");
        data_Chart(dr, 0, Server.MapPath("test.gif"), 800, 600);
        ImageMap1.ImageUrl = "~/test.gif";
    }
    /// <summary>
    /// 生成图表
    /// </summary>
    /// <param name="sdr">数据源(sqlDataReader)</param>
    /// <param name="intChartTypes">图片类型</param>
    /// <param name="filePath">图片路径</param>
    /// <param name="chartWidth">图片宽度</param>
    /// <param name="chartHeight">图片高度</param>
    /// <returns>图片存放的相对路径</returns>
    public string data_Chart(OleDbDataReader sdr, int intChartTypes, string filePath, int chartWidth, int chartHeight)
    {
        ArrayList[] data_al = new ArrayList[sdr.FieldCount];

        for (int i = 0; i < sdr.FieldCount; i++)
        {
            data_al[i] = new ArrayList();
        }

        while (sdr.Read())
        {
            for (int i = 0; i < sdr.FieldCount; i++)
            {
                data_al[i].Add(sdr.GetValue(i).ToString());
            }
        }
        sdr.Close();
        ChartSpace objCSpace = new ChartSpaceClass();

        //在ChartSpace对象中添加图表,Add方法返回chart对象
        ChChart objChart = objCSpace.Charts.Add(0);

        //指定图表是否需要图例
        objChart.HasLegend = true;
        objChart.HasTitle = true;
        objChart.Title.Caption = "分析图";

        //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
        ChartChartTypeEnum[] chartTypes = new ChartChartTypeEnum[]{ ChartChartTypeEnum.chChartTypeColumnClustered,
        ChartChartTypeEnum.chChartTypeColumn3D,
        ChartChartTypeEnum.chChartTypeBarClustered,
        ChartChartTypeEnum.chChartTypeBar3D,
        ChartChartTypeEnum.chChartTypeArea,
        ChartChartTypeEnum.chChartTypeArea3D,
        ChartChartTypeEnum.chChartTypeDoughnut,
        ChartChartTypeEnum.chChartTypeLineStacked,
        ChartChartTypeEnum.chChartTypeLine3D,
        ChartChartTypeEnum.chChartTypeLineMarkers,
        ChartChartTypeEnum.chChartTypePie,
        ChartChartTypeEnum.chChartTypePie3D,
      ChartChartTypeEnum.chChartTypeRadarSmoothLine,
      ChartChartTypeEnum.chChartTypeSmoothLine};

        objChart.Type = chartTypes[intChartTypes];
        //string[] chartTypesCh = new string [] {"垂直柱状统计图","3D垂直柱状统计图","水平柱状统计图","3D水平柱状统计图","区域统计图","3D区域统计图","中空饼图","折线统计图","3D折线统计图","折线带点统计图","饼图","3D饼图","网状统计图","弧线统计图"};

        for (int i = 0; i < data_al.Length - 1; i++)
        {
            //在ChartSpace对象中添加图表,Add方法返回chart对象
            objChart.SeriesCollection.Add(i);
            objChart.SeriesCollection[i].DataLabelsCollection.Add();
            string strSeriesName = "" + (i + 1);
            //给定series的名字
            objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimSeriesNames,
             (int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
            //给定分类
            objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimCategories,
             (int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[0].ToArray());

            //给定值
            objChart.SeriesCollection[i].SetData
             (ChartDimensionsEnum.chDimValues,
             (int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[i + 1].ToArray());

            objChart.SeriesCollection[i].Caption = "Example";

        }
        //输出成GIF文件.
        //string strAbsolutePath = filePath + "\\temp\\test.gif";

        objCSpace.ExportPicture(filePath, "GIF", chartWidth, chartHeight);

        //创建GIF文件的相对路径.
        string strRelativePath;
        //strRelativePath = @"..\Analyse\temp\test.gif";
        strRelativePath = filePath;
        return strRelativePath;
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        int num = DropDownList1.SelectedIndex;
        OleDbDataReader dr = GetList("select TOP 10 OrderDate,ShipVia from orders order by orderid");
        data_Chart(dr, num, Server.MapPath("test.gif"), 800, 600);
        ImageMap1.ImageUrl = "~/test.gif";
    }
    public OleDbDataReader GetList(string Sql)
    {
        OleDbConnection myConnection = new OleDbConnection("Provider=SQLOLEDB;server=192.168.0.15;uid=sa;pwd=sa; database=Northwind;");
        OleDbCommand myCommand = new OleDbCommand(Sql, myConnection);
        myConnection.Open();
        OleDbDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
        return result;
    }
}


--------------------------------------c#版----------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Owc11;
using System.Data.OleDb;
using System.Collections;

namespace OWC
{
    public partial class ADOchart : Form
    {
        public ADOchart()
        {
            InitializeComponent();
            //string[] chartTypesCh = new string [] {"垂直柱状统计图","3D垂直柱状统计图","水平柱状统计图","3D水平柱状统计图","区域统计图","3D区域统计图","中空饼图","折线统计图","3D折线统计图","折线带点统计图","饼图","3D饼图","网状统计图","弧线统计图"};
            comboBox1.Items.Add("垂直柱状统计图");
            comboBox1.Items.Add("3D垂直柱状统计图");
            comboBox1.Items.Add("水平柱状统计图");
            comboBox1.Items.Add("3D水平柱状统计图");
            comboBox1.Items.Add("区域统计图");
            comboBox1.Items.Add("3D区域统计图");
            comboBox1.Items.Add("中空饼图");
            comboBox1.Items.Add("折线统计图");
            comboBox1.Items.Add("3D折线统计图");
            comboBox1.Items.Add("折线带点统计图");
            comboBox1.Items.Add("饼图");
            comboBox1.Items.Add("3D饼图");
            comboBox1.Items.Add("网状统计图");
            comboBox1.Items.Add("弧线统计图");
            comboBox1.SelectedIndex = 0;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int num = comboBox1.SelectedIndex;
            OleDbDataReader dr = GetList("select top 10 OrderDate,ShipVia from orders order by orderid");
            data_Chart(dr, num, Application.StartupPath+"test.gif", 800, 600);
            MessageBox.Show("完成");
        }
        public OleDbDataReader GetList(string Sql)
        {
            OleDbConnection myConnection = new OleDbConnection("Provider=SQLOLEDB;server=192.168.0.15;uid=sa;pwd=sa; database=Northwind;");
            OleDbCommand myCommand = new OleDbCommand(Sql, myConnection);
            myConnection.Open();
            OleDbDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
            return result;
        }
        public string data_Chart(OleDbDataReader sdr, int intChartTypes, string filePath, int chartWidth, int chartHeight)
        {
            ArrayList[] data_al = new ArrayList[sdr.FieldCount];
            for (int i = 0; i < sdr.FieldCount; i++)
            {
                data_al[i] = new ArrayList();
            }
            while (sdr.Read())
            {
                for (int i = 0; i < sdr.FieldCount; i++)
                {
                    data_al[i].Add(sdr.GetValue(i).ToString());
                }
            }
            sdr.Close();
            //清空上一次存在的图例
            axChartSpace1.Clear();
            ChartSpace objCSpace = new ChartSpaceClass();

            //在ChartSpace对象中添加图表,Add方法返回chart对象
           // ChChart objChart = objCSpace.Charts.Add(0);//保存图片用
            ChChart objChart = axChartSpace1.Charts.Add(0);//界面上用

            //指定图表是否需要图例
            objChart.HasLegend = true;
            objChart.HasTitle = true;
            objChart.Title.Caption = "分析图";
            //xy轴说明
            objChart.Axes[0].HasTitle = true;
            objChart.Axes[0].Title.Caption = "OrderDate";
            objChart.Axes[1].HasTitle = true;
            objChart.Axes[1].Title.Caption = "ShipVia";
            //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
            ChartChartTypeEnum[] chartTypes = new ChartChartTypeEnum[]{ ChartChartTypeEnum.chChartTypeColumnClustered,
            ChartChartTypeEnum.chChartTypeColumn3D,
            ChartChartTypeEnum.chChartTypeBarClustered,
            ChartChartTypeEnum.chChartTypeBar3D,
            ChartChartTypeEnum.chChartTypeArea,
            ChartChartTypeEnum.chChartTypeArea3D,
            ChartChartTypeEnum.chChartTypeDoughnut,
            ChartChartTypeEnum.chChartTypeLineStacked,
            ChartChartTypeEnum.chChartTypeLine3D,
            ChartChartTypeEnum.chChartTypeLineMarkers,
            ChartChartTypeEnum.chChartTypePie,
            ChartChartTypeEnum.chChartTypePie3D,
          ChartChartTypeEnum.chChartTypeRadarSmoothLine,
          ChartChartTypeEnum.chChartTypeSmoothLine};

            objChart.Type = chartTypes[intChartTypes];//得到图例类型

            for (int i = 0; i < data_al.Length - 1; i++)
            {
                //在ChartSpace对象中添加图表,Add方法返回chart对象
                objChart.SeriesCollection.Add(i);
                objChart.SeriesCollection[i].DataLabelsCollection.Add();
                string strSeriesName = "" + (i + 1);
                //给定series的名字
                objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimSeriesNames,
                 (int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);
                //给定分类
                objChart.SeriesCollection[i].SetData(ChartDimensionsEnum.chDimCategories,
                 (int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[0].ToArray());
                //给定值
                objChart.SeriesCollection[i].SetData
                 (ChartDimensionsEnum.chDimValues,
                 (int)ChartSpecialDataSourcesEnum.chDataLiteral, data_al[i + 1].ToArray());
                objChart.SeriesCollection[i].Caption = "Example";
            }
            //输出成GIF文件.
            objCSpace.ExportPicture(filePath, "GIF", chartWidth, chartHeight);

            //创建GIF文件的相对路径.
            string strRelativePath;
            strRelativePath = filePath;
            return strRelativePath;
        }
    }
}

posted on 2012-05-07 11:16  Haydy  阅读(1418)  评论(0编辑  收藏  举报