• 在Web页面上通过OWC作图的用户控件


    在Web上作图一般都采用先生成图片,然后再显示的方法。本文也不例外。
    自制了一个Web用户控件,通过设置属性可以显示几种简单的图形。
    柱状图、面积图、折线图、条状图、曲线图。

    怎样安装OWC的环境,已经有很多文章了,这里就不再赘述了。
    下面是控件的代码,页面上只需要加一个名为Image1的Image即可。

        using System;
        
    using System.Data;
        
    using System.Drawing;
        
    using System.Web;
        
    using System.Web.UI;
        
    using System.Web.UI.WebControls;
        
    using System.Web.UI.HtmlControls;
        
    using Microsoft.Office.Interop.OWC;
        
    using System.IO;

        
    /// <summary>
        
    ///        ControlGraph 的摘要说明。
        
    /// </summary>

        public class ControlGraph : System.Web.UI.UserControl
        
    {
            
    //图表类型
            private ChartChartTypeEnum m_GraphType = ChartChartTypeEnum.chChartTypeColumnClustered;
            
    //图表标题
            private string m_Title="";
            
    //X轴标题
            private string m_XTitle="";
            
    //Y轴标题
            private string m_YTitle="";
            
    private bool m_HasValue=true;
            
    protected System.Web.UI.WebControls.Image Image1;
            
    private DataTable m_dt;
            
    public enum GraphTypeEnum{ColumnClustered,Line,Pie,BarClustered,SmoothLine,Area};

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


            
    #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


            
    public void DataSource(DataTable dt)
            
    {
                m_dt
    =dt;
            }

            
    /// <summary>
            
    /// 图形的形式显示表
            
    /// </summary>
            
    /// <param name="dt"></param>

            public void SetBind()
            
    {
                
    // 在此处放置用户代码以初始化页面
                
    //创建ChartSpace对象来放置图表
                ChartSpace objCSpace = new ChartSpaceClass (); 

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

                
    //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到
                objChart.Type = m_GraphType;// ChartChartTypeEnum.chChartTypeColumnClustered;

                
    //指定图表是否需要图例
                objChart.HasLegend = true;

                
    //给定标题
                objChart.HasTitle = true;
                objChart.Title.Caption
    = m_Title;//"上半年分布图";

                
    if(m_GraphType == ChartChartTypeEnum.chChartTypeColumnClustered)
                
    {
                    
    //给定x,y轴的图示说明
                    objChart.Axes[0].HasTitle = true;
                    objChart.Axes[
    0].Title.Caption = m_XTitle;//"Y : 数量";
                    objChart.Axes[1].HasTitle = true;
                    objChart.Axes[
    1].Title.Caption = m_YTitle;//"X : 月份";
                }


                
    //计算数据
                int iCount=m_dt.Columns.Count;
                
    int jCount=m_dt.Rows.Count;
                
    string strSeriesName="";
                
    string strCategory="" ;
                
    string strValue="";

                
    for(int i=0;i<iCount;i++)
                
    {
                    
    if(i==0)
                    
    {
                        
    for(int j=0;j<jCount;j++)
                        
    {
                            strCategory
    +=(m_dt.Rows[j][0].ToString()+'\t');
                        }

                    }

                    
    else
                    
    {
                        strSeriesName
    =m_dt.Columns[i].ColumnName;
                        strValue
    ="";
                        
    for(int j=0;j<jCount;j++)
                        
    {
                            strValue
    +=(m_dt.Rows[j][i].ToString()+'\t');
                        }

                        
    //添加一个series
                        objChart.SeriesCollection.Add(i-1);

                        
    //给定series的名字
                        objChart.SeriesCollection[i-1].SetData (ChartDimensionsEnum.chDimSeriesNames,
                            
    + (int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);

                        
    //给定分类
                        objChart.SeriesCollection[i-1].SetData (ChartDimensionsEnum.chDimCategories,
                            
    + (int)ChartSpecialDataSourcesEnum.chDataLiteral, strCategory);

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

                        
    //添加值
                        if(m_HasValue)
                        
    {
                            objChart.SeriesCollection[i
    -1].DataLabelsCollection.Add();
                            
    if(m_GraphType==ChartChartTypeEnum.chChartTypePie)
                            
    {
                                objChart.SeriesCollection[i
    -1].DataLabelsCollection[0].HasPercentage = true;
                            }

                            
    else
                            
    {
                                objChart.SeriesCollection[i
    -1].DataLabelsCollection[0].HasPercentage = false;    
                            }


                            objChart.SeriesCollection[i
    -1].DataLabelsCollection[0].HasCategoryName = false;
                            
    if(m_GraphType==ChartChartTypeEnum.chChartTypePie)
                            
    {
                                objChart.SeriesCollection[i
    -1].DataLabelsCollection[0].HasValue = false;
                            }

                            
    else
                            
    {
                                objChart.SeriesCollection[i
    -1].DataLabelsCollection[0].HasValue = true;
                            }

                        
                            objChart.SeriesCollection[i
    -1].DataLabelsCollection[0].Interior.Color = "white";
                            objChart.SeriesCollection[i
    -1].DataLabelsCollection[0].Font.Name = "Verdana";
                        }

                    }

                }

                
    //输出成GIF文件.
                string strFullPathAndName=Server.MapPath(System.DateTime.Now.Ticks.ToString() +".gif");
                objCSpace.ExportPicture( strFullPathAndName, 
    "GIF"600350);
                Image1.ImageUrl
    =strFullPathAndName;
                Image1.Visible 
    =true;
                RemoveFiles(Server.MapPath(
    "."));
            }


            
    /// <summary>
            
    /// 删除超时文件
            
    /// </summary>
            
    /// <param name="strPath"></param>

            private void RemoveFiles(string strPath)
            
    {             
                System.IO.DirectoryInfo di 
    = new DirectoryInfo(strPath);
                FileInfo[] fiArr 
    = di.GetFiles();
                
    foreach (FileInfo fi in fiArr)
                
    {               
                    
    if(fi.Extension.ToString() ==".gif" )
                    
    {
                        
    // if file is older than 2 minutes, we'll clean it up
                        TimeSpan min = new TimeSpan(0,0,0,2,0);
                        
    if(fi.CreationTime < DateTime.Now.Subtract(min))
                        
    {
                            fi.Delete();
                        }

                    }

                }

            }


            
    /// <summary>
            
    /// 图表类型
            
    /// </summary>

            public GraphTypeEnum GraphType
            
    {
                
    get
                
    {
                    
    switch(m_GraphType)
                    
    {
                        
    case ChartChartTypeEnum.chChartTypeColumnClustered:
                            
    return GraphTypeEnum.ColumnClustered;
                        
    case ChartChartTypeEnum.chChartTypeLine:
                            
    return GraphTypeEnum.Line;
                        
    case ChartChartTypeEnum.chChartTypePie:
                            
    return GraphTypeEnum.Pie;
                        
    case ChartChartTypeEnum.chChartTypeBarClustered:
                            
    return GraphTypeEnum.BarClustered;
                        
    case ChartChartTypeEnum.chChartTypeSmoothLine:
                            
    return GraphTypeEnum.SmoothLine;
                        
    case ChartChartTypeEnum.chChartTypeArea:
                            
    return GraphTypeEnum.Area;
                            
                        
    default:
                            
    return GraphTypeEnum.ColumnClustered;
                    }

                }

                
    set{
                    
    switch(value)
                    
    {
                        
    case GraphTypeEnum.ColumnClustered:
                            m_GraphType
    = ChartChartTypeEnum.chChartTypeColumnClustered;
                            
    break;
                        
    case GraphTypeEnum.Line:
                            m_GraphType
    = ChartChartTypeEnum.chChartTypeLine;
                            
    break;
                        
    case GraphTypeEnum.Pie:
                            m_GraphType
    = ChartChartTypeEnum.chChartTypePie;
                            
    break;
                        
    case GraphTypeEnum.BarClustered:
                            m_GraphType 
    = ChartChartTypeEnum.chChartTypeBarClustered;
                            
    break;
                        
    case GraphTypeEnum.SmoothLine:
                            m_GraphType 
    = ChartChartTypeEnum.chChartTypeSmoothLine;
                            
    break;
                        
    case GraphTypeEnum.Area:
                            m_GraphType 
    = ChartChartTypeEnum.chChartTypeArea;
                            
    break;
                    }

                }

            }


            
    /// <summary>
            
    /// 图表标题
            
    /// </summary>

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

            
    /// <summary>
            
    /// X轴标题
            
    /// </summary>

            public string XTitle
            
    {
                
    get{return m_XTitle;}
                
    set{m_XTitle=value;}
            }

            
    /// <summary>
            
    /// YY轴标题
            
    /// </summary>

            public string YTitle
            
    {
                
    get{return m_YTitle;}
                
    set{m_YTitle=value;}
            }

            
    /// <summary>
            
    /// 是否显示值
            
    /// </summary>

            public bool HasValue
            
    {
                
    get{return m_HasValue;}
                
    set{m_HasValue=value;}
            }

        }


    控件的调用

                    ControlGraph1.GraphType =ControlGraph.GraphTypeEnum.ColumnClustered;
                    ControlGraph1.Title 
    = "工作量和bug";
                    ControlGraph1.XTitle 
    ="数值";
                    ControlGraph1.YTitle 
    ="人员";
                    DataTable dt 
    = new DataTable();
                    dt.Columns.Add(
    "Name");
                    dt.Columns.Add(
    "cost");
                    dt.Columns.Add(
    "bug");
                    DataRow rw 
    = dt.NewRow();
                    rw[
    "Name"]= "";
                    rw[
    "Cost"]= "12";
                    rw[
    "bug"]= "5";
                    dt.Rows.Add(rw);
                    rw 
    = dt.NewRow();
                    rw[
    "Name"]= "";
                    rw[
    "Cost"]= "15";
                    rw[
    "bug"]= "2";
                    dt.Rows.Add(rw);
                    rw 
    = dt.NewRow();
                    rw[
    "Name"]= "";
                    rw[
    "Cost"]= "8";
                    rw[
    "bug"]= "1";
                    dt.Rows.Add(rw);
                       ControlGraph1.DataSource(dataTable);
                       ControlGraph1.SetBind()

    数据源采用DataTable,第一列为分类,其他列为值。

  • 相关阅读:
    homework2
    一件关于Bug的小事
    软件测试作业三:有关控制流图、覆盖内容
    用CSS改变select框的样式
    lab1--ideal + junit
    软件测试作业二
    记一次曾经项目中遇到的错误
    02组_现代软件工程_第04次作业——利用4象限原理分析自身CanTool项目的构成
    02组_现代软件工程_第03次作业——对于自身评价(原有水平以及长远目标分析总结)
    02组_现代软件工程_第02次作业——初谈GitHub使用详解以及设计
  • 原文地址:https://www.cnblogs.com/echo/p/158136.html
Copyright © 2020-2023  润新知