封装OWC做统计图形

封装OWC做统计图形
using System;
using System.Data;
using System.Text;
using System.Drawing;

namespace doHope.OWCC
{
    /** <summary>
    /// 封装OWC做统计图
    /// by cherish58
    /// </summary>
    public class OWCChart
    {
        属性#region 属性

        private string _phaysicalimagepath;
        private string _title;
        private string _seriesname;
        private int _picwidth;
        private int _pichight;
        private DataTable _datasource;
        private string _strdatasource;
        private string strCategory;
        private string strValue;

        /** <summary>
        /// 图片存放路径
        /// </summary>
        public string PhaysicalImagePath
        {
            set{_phaysicalimagepath=value;}
            get{return _phaysicalimagepath;}
        }

        public string Title
        {
            set{_title=value;}
            get{return _title;}
        }

        public string SeriesName
        {
            set{_seriesname=value;}
            get{return _seriesname;}
        }

        public int PicWidth
        {
            set{_picwidth=value;}
            get{return _picwidth;}
        }

        public int PicHight
        {
            set{_pichight=value;}
            get{return _pichight;}
        }

        /** <summary>
        /// 传DataTable类型
        /// </summary>
        public DataTable DataSource
        {
            set
            {
                _datasource=value;
                strCategory=GetColumnsStr(_datasource);
                strValue=GetValueStr(_datasource);
            }
            get{return _datasource;}
        }

        /** <summary>
        /// 传字符串,分隔用分号(;)
        /// </summary>
        public string strDataSource
        {
            set
            {
                _strdatasource = value ;
                strCategory=GetColumnsStr(_strdatasource);
                strValue=GetValueStr(_strdatasource);
            }
            get{return _strdatasource;}
        }

        private string GetColumnsStr(DataTable dt)
        {
            StringBuilder strList=new StringBuilder();
            foreach(DataRow r in dt.Rows)
            {
                strList.Append(r[0].ToString()+'/t');
            }
            return strList.ToString();
        }

        private string GetColumnsStr(string coldt)
        {
            return coldt == "" ? "" : coldt.Substring(0,coldt.IndexOf(";")) ;
        }

        private string GetValueStr(DataTable dt)
        {
            StringBuilder strList=new StringBuilder();
            foreach(DataRow r in dt.Rows)
            {
                strList.Append(r[1].ToString()+'/t');
            }
            return strList.ToString();
        }

        private string GetValueStr(string rowdt)
        {
            return rowdt == "" ? "" : rowdt.Substring(rowdt.LastIndexOf(";")+1) ;
        }

        #endregion

        构造函数#region 构造函数

        /** <summary>
        /// 0
        /// </summary>
        public OWCChart()
        {
            //
        }       

        /** <summary>
        /// 1
        /// </summary>
        /// <param name="PhaysicalImagePath"></param>
        /// <param name="Title"></param>
        /// <param name="SeriesName"></param>
        /// <param name="PicWidth"></param>
        /// <param name="PicHight"></param>
        public OWCChart(string PhaysicalImagePath,string Title,string SeriesName,int PicWidth,int PicHight)
        {
            _phaysicalimagepath=PhaysicalImagePath;
            _title=Title;
            _seriesname=SeriesName;
            _pichight = PicHight ;
            _picwidth = PicWidth ;
        }

        /** <summary>
        /// 2
        /// </summary>
        /// <param name="Title"></param>
        /// <param name="SeriesName"></param>
        /// <param name="PicWidth"></param>
        /// <param name="PicHight"></param>
        public OWCChart(string Title,string SeriesName,int PicWidth,int PicHight)
        {
            _title=Title;
            _seriesname=SeriesName;
            _pichight = PicHight ;
            _picwidth = PicWidth ;
        }

        #endregion
 
        柱形图#region 柱形图

        /** <summary>
        /// 柱形图
        /// </summary>
        /// <param name="Xname">X轴描述</param>
        /// <param name="Yname">Y轴描述</param>
        /// <param name="IfExportToFile">若把图像输出到文件夹则为true,否则为false</param>
        /// <returns>若把图像输出到文件夹返回生成的图像名称,否则返回Bitmap类型</returns>
        public Object CreateColumn(string Xname,string Yname,bool IfExportToFile,bool If3D)
        {
            OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass() ;//创建ChartSpace对象来放置图表  
            OWC11.ChChart objChart  = objCSpace.Charts.Add(0) ;//在ChartSpace对象中添加图表,Add方法返回chart对象
          
            //指定图表的类型。类型由OWC11.ChartChartTypeEnum枚举值得到
            if(If3D == true)
                objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered3D ;
            else
                objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeColumnClustered ;
  
            //指定图表是否需要图例
            objChart.HasLegend = true ;
  
            //标题
            objChart.HasTitle = true;
            objChart.Title.Caption= _title;
            objChart.Title.Font.Bold=true;
//          objChart.Title.Font.Color="blue";       

            样式设置#region 样式设置 

            //旋转
//            objChart.Rotation  = 145;//表示指定三维图表的旋转角度
//            objChart.Inclination = 10;//表示指定三维图表的视图斜率。有效范围为 -90 到 90
//
//            //背景颜色
//            objChart.PlotArea.Interior.Color = "red";
//
//            //底座颜色
//            objChart.PlotArea.Floor.Interior.Color = "green";
//            objChart.Overlap = 50;//单个类别中标志之间的重叠量

            #endregion
  
            //x,y轴的图示说明
            objChart.Axes[0].HasTitle = true;
            objChart.Axes[0].Title.Caption = "X : "+Xname+"";
            objChart.Axes[1].HasTitle = true;
            objChart.Axes[1].Title.Caption = "Y : "+Yname+"";  

            //添加一个series
            OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);

            //给定series的名字
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
            //给定分类
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
            //给定值
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);

            OWC11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();  
            dl.HasValue=true;
//          dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
     
//            string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";

            if(IfExportToFile == true)
            {
                string filename = "temp.gif" ;
                string strAbsolutePath = _phaysicalimagepath + "//"+filename;
                objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //输出成GIF文件.

                return filename ;  
            }
            else
            {
                string tmp = "Tmp" ;
                objCSpace.ExportPicture(tmp,"GIF",_picwidth,_pichight) ;
                Bitmap bm = new Bitmap(tmp,true) ;

                return bm ;
            }
        }

        #endregion

        线性图#region 线性图

        /** <summary>
        /// 线性图
        /// </summary>
        /// <param name="Xname">X轴描述</param>
        /// <param name="Yname">Y轴描述</param>
        /// <param name="IfExportToFile">若把图像输出到文件夹则为true,否则为false</param>
        /// <returns>若把图像输出到文件夹返回生成的图像名称,否则返回Bitmap类型</returns>
        public Object CreateLine(string Xname,string Yname,bool IfExportToFile,bool If3D)
        {
            OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass() ;//创建ChartSpace对象来放置图表  
            OWC11.ChChart objChart  = objCSpace.Charts.Add(0) ;//在ChartSpace对象中添加图表,Add方法返回chart对象
          
            //指定图表的类型。类型由OWC11.ChartChartTypeEnum枚举值得到
            if(If3D == true)
                objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeLine3D ;
            else
                objChart.Type = OWC11.ChartChartTypeEnum.chChartTypeLine ;
  
            //指定图表是否需要图例
            objChart.HasLegend = true ;
  
            //标题
            objChart.HasTitle = true;
            objChart.Title.Caption= _title;
            objChart.Title.Font.Bold=true;
//          objChart.Title.Font.Color="blue";       

            样式设置#region 样式设置 

            //旋转
//            objChart.Rotation  = 145;//表示指定三维图表的旋转角度
//            objChart.Inclination = 10;//表示指定三维图表的视图斜率。有效范围为 -90 到 90
//
//            //背景颜色
//            objChart.PlotArea.Interior.Color = "red";
//
//            //底座颜色
//            objChart.PlotArea.Floor.Interior.Color = "green";
//            objChart.Overlap = 50;//单个类别中标志之间的重叠量

            #endregion
  
            //x,y轴的图示说明
            objChart.Axes[0].HasTitle = true;
            objChart.Axes[0].Title.Caption = "X : "+Xname+"";
            objChart.Axes[1].HasTitle = true;
            objChart.Axes[1].Title.Caption = "Y : "+Yname+"";  

            //添加一个series
            OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);

            //给定series的名字
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
            //给定分类
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
            //给定值
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);

            OWC11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();  
            dl.HasValue=true;
//          dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;

//            string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";

            if(IfExportToFile == true)
            {
                string filename = "temp.gif" ;
                string strAbsolutePath = _phaysicalimagepath + "//"+filename;
                objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //输出成GIF文件.

                return filename ;  
            }
            else
            {
                string tmp = "Tmp" ;
                objCSpace.ExportPicture(tmp,"GIF",_picwidth,_pichight) ;
                Bitmap bm = new Bitmap(tmp,true) ;

                return bm ;
            }
        }

        #endregion

        条形图(横向)#region 条形图(横向)

        /** <summary>
        /// 条形图(横向)
        /// </summary>
        /// <param name="Xname"></param>
        /// <param name="Yname"></param>
        /// <param name="IfExportToFile"></param>
        /// <returns></returns>
        public Object CreateBar(string Xname,string Yname,bool IfExportToFile,bool If3D)
        {
            OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass();//创建ChartSpace对象来放置图表  
            OWC11.ChChart objChart  = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象
          
            //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
            if(If3D == true)
                objChart.Type=OWC11.ChartChartTypeEnum.chChartTypeBarClustered3D ;
            else
                objChart.Type=OWC11.ChartChartTypeEnum.chChartTypeBarClustered;
  
            //指定图表是否需要图例
            objChart.HasLegend = true;
  
            //标题
            objChart.HasTitle = true;
            objChart.Title.Caption= _title;
            objChart.Title.Font.Bold=true;
//          objChart.Title.Font.Color="blue";       

            样式设置#region 样式设置 

            //旋转
//            objChart.Rotation  = 145;//表示指定三维图表的旋转角度
//            objChart.Inclination = 10;//表示指定三维图表的视图斜率。有效范围为 -90 到 90

            //背景颜色
//            objChart.PlotArea.Interior.Color = "red";

            //底座颜色
//            objChart.PlotArea.Floor.Interior.Color = "green";
//            objChart.Overlap = 50;//单个类别中标志之间的重叠量

            #endregion
  
            //x,y轴的图示说明
            objChart.Axes[0].HasTitle = true;
            objChart.Axes[0].Title.Caption = "X : "+Xname+"";
            objChart.Axes[1].HasTitle = true;
            objChart.Axes[1].Title.Caption = "Y : "+Yname+"";  

            //添加一个series
            OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);

            //给定series的名字
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
            //给定分类
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
            //给定值
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);

            OWC11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();  
            dl.HasValue=true;
//          dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;   
 
//            string filename=DateTime.Now.ToString("yyyyMMddHHmmssff")+".gif";

            if(IfExportToFile == true)
            {
                string filename = "temp.gif" ;
                string strAbsolutePath = _phaysicalimagepath + "//"+filename;
                objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //输出成GIF文件.

                return filename ;  
            }
            else
            {
                string tmp = "Tmp" ;
                objCSpace.ExportPicture(tmp,"GIF",_picwidth,_pichight) ;
                Bitmap bm = new Bitmap(tmp,true) ;

                return bm ;
            }
        }

        #endregion

        饼图#region 饼图

        /** <summary>
        /// 饼图
        /// </summary>
        /// <param name="IfExportToFile"></param>
        /// <returns></returns>
        public Object CreatePie(bool IfExportToFile,bool If3D)
        {
            OWC11.ChartSpace objCSpace = new OWC11.ChartSpaceClass();//创建ChartSpace对象来放置图表  
            OWC11.ChChart objChart  = objCSpace.Charts.Add(0);//在ChartSpace对象中添加图表,Add方法返回chart对象      
     
            //指定图表的类型
            if(If3D == true)
                objChart.Type=OWC11.ChartChartTypeEnum.chChartTypePie3D ;
            else
                objChart.Type=OWC11.ChartChartTypeEnum.chChartTypePie;

            //指定图表是否需要图例
            objChart.HasLegend = true;
  
            //标题
            objChart.HasTitle = true;
            objChart.Title.Caption= _title;
            objChart.Title.Font.Bold = true ;
        
            //添加一个series
            OWC11.ChSeries ThisChSeries = objChart.SeriesCollection.Add(0);

            //给定series的名字
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimSeriesNames,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),SeriesName);
            //给定分类
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimCategories,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strCategory);
            //给定值
            ThisChSeries.SetData(OWC11.ChartDimensionsEnum.chDimValues,
                OWC11.ChartSpecialDataSourcesEnum.chDataLiteral.GetHashCode(),strValue);     

            //表示系列或趋势线上的单个数据标志
            OWC11.ChDataLabels dl=objChart.SeriesCollection[0].DataLabelsCollection.Add();  
            dl.HasValue=true;
            dl.HasPercentage=true;  
            //图表绘图区的图例放置在右侧。
//          dl.Position=OWC11.ChartDataLabelPositionEnum.chLabelPositionRight;
  
//            string filename=DateTime.Now.Ticks.ToString()+".gif";
 
            if(IfExportToFile == true)
            {
                string filename = "temp.gif" ;
                string strAbsolutePath = _phaysicalimagepath + "//"+filename;
                objCSpace.ExportPicture(strAbsolutePath, "GIF", _picwidth, _pichight); //输出成GIF文件.

                return filename ;  
            }
            else
            {
                string tmp = "Tmp" ;
                objCSpace.ExportPicture(tmp,"GIF",_picwidth,_pichight) ;
                Bitmap bm = new Bitmap(tmp,true) ;

                return bm ;
            }
        }

        #endregion
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值