收录日期:2018/10/18 03:05:39 时间:2016/05/24 00:06:39 标签:ASP.NET
小弟我东拼西凑写了一个公共函数- public static string getGif(DataTable getDataTable,string[] getGroup,string getType) ,来动态的做一个OWC图表(可动态分组的),传入三个参数(DataTable-数据 , string[]-{组名1,组名2,组名3……} , string-图表类型),传出gif图片地址,图表已经可以显示了,但是还存在一些棘手的小问题,代码如下:
        //getData格式:“分组”,“名字”,“分数”……
        public static string getGif(DataTable getDataTable,string[] getGroup,string getType)
        {
            int tableRowCount = getDataTable.Rows.Count;
            int tableColumnCount = getDataTable.Columns.Count;
            //得到getGroup长度
            int groupLong = getGroup.Length;
            //把getDataTable放入二维数组tableToArray
            string[,] tableToArray = new string[tableRowCount,tableColumnCount];
            for(int i=0;i<tableRowCount;i++)
            {
                for(int j=0;j<tableColumnCount;j++)
                {
                    tableToArray[i,j] = Convert.ToString(getDataTable.Rows[i][j]);
                }
            }
            //得到各个分组的数据的长度
            int[] perGroupLong = new int[groupLong];
            for(int i=0;i<groupLong;i++)
            {
                int getPerGroupLong = 0;
                for(int j=0;j<tableRowCount;j++)
                {
                    if(tableToArray[j,0] == getGroup[i])
                    {
                        getPerGroupLong++;
                    }
                }
                perGroupLong[i] = getPerGroupLong;
            }
            //把二维数组tableToArray中的数据进行分组,放入交错数组groupArray中
            string[][,] crossArray = new string[groupLong][,];
            for(int i=0;i<groupLong;i++)
            {
                //过渡数组
                string[,] transArray = new string[perGroupLong[i],tableColumnCount];
                int transArrayRow = 0;
                for(int j=0;j<tableRowCount;j++)
                {
                    if(tableToArray[j,0] == getGroup[i])
                    {
                        for(int k=0;k<tableColumnCount;k++)
                        {
                            transArray[transArrayRow,k] = tableToArray[j,k];
                        }
                        transArrayRow++;
                    }
                }
                crossArray[i] = transArray;
            }
            //创建ChartSpace对象来放置图表
            OWC10.ChChartSpace objCSpace = new OWC10.ChartSpaceClass();
            //在ChartSpace对象中添加图表,Add方法返回chart对象
            OWC10.ChChart objChart = objCSpace.Charts.Add (0);
            //图表格式
            switch(getType)
            {
                    case "chChartTypeColumnClustered3D":
                    //3D图
                    objChart.Type = OWC10.ChartChartTypeEnum.chChartTypeColumnClustered3D;
                break; 
                case "chChartTypeColumnClustered":
                    //棒图
                    objChart.Type = OWC10.ChartChartTypeEnum.chChartTypeColumnClustered;
                break; 
                case "chChartTypePie":
                    //饼图
                    objChart.Type = OWC10.ChartChartTypeEnum.chChartTypePie;
                break; 
                case "chChartTypePieStacked":
                    //环图
                    objChart.Type = OWC10.ChartChartTypeEnum.chChartTypePieStacked;
                break; 
            }
            //指定图表是否需要图例
            objChart.HasLegend = true;
            //实例图标的位置
            objChart.Legend.Position = OWC10.ChartLegendPositionEnum.chLegendPositionBottom;
            //“饼图”,“环图”没有X,Y轴
            if(getType != "chChartTypePie" &&  getType != "chChartTypePieStacked")
            {
                //Axes[0]为X轴,Axes[1]Y轴
                objChart.Axes[0].HasTitle=true;
                objChart.Axes[0].Title.Caption="X";
                objChart.Axes[0].Title.Font.Size=9;
                objChart.Axes[1].HasTitle=true;
                objChart.Axes[1].Title.Caption="Y";
                objChart.Axes[1].Title.Font.Size=9;
            }
           //给定标题
           objChart.HasTitle = true;
           //标题
           string ChartTitle = "aaaaa";
           objChart.Title.Caption = ChartTitle;
           objChart.Title.Font.Size = 10;
           //3D图,棒图
           if(getType == "chChartTypeColumnClustered3D" || getType == "chChartTypeColumnClustered")
           {
               //添加series
               for(int i=0;i<tableRowCount;i++)
               {
                   objChart.SeriesCollection.Add(i);
                   //在图表的各项上显示值
                   objChart.SeriesCollection[i].DataLabelsCollection.Add().HasValue = true;
               }
               //给定series的名字
               for(int i=0;i<groupLong;i++)
               {
                   for(int j=0;j<crossArray[i].Length/tableColumnCount;j++)
                   {
                       int seriesLong = 0;
                       for(int k=0;k<i;k++)
                       {
                           seriesLong += crossArray[k].Length/tableColumnCount;
                       }
                       string test = crossArray[i][j,1];
                       objChart.SeriesCollection[seriesLong + j].SetData (OWC10.ChartDimensionsEnum.chDimSeriesNames,(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, crossArray[i][j,1].ToString());
                   }
               }
               //给定分类
               for(int i=0;i<groupLong;i++)
               {
                   for(int j=0;j<crossArray[i].Length/tableColumnCount;j++)
                   {
                       int seriesLong = 0;
                       for(int k=0;k<i;k++)
                       {
                           seriesLong += crossArray[k].Length/tableColumnCount;
                       }
                       string test = crossArray[i][j,0];
                       objChart.SeriesCollection[seriesLong + j].SetData (OWC10.ChartDimensionsEnum.chDimCategories,(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, crossArray[i][j,0].ToString());
                   }
               }
               //给定值
               for(int i=0;i<groupLong;i++)
               {
                   for(int j=0;j<crossArray[i].Length/tableColumnCount;j++)
                   {
                       int seriesLong = 0;
                       for(int k=0;k<i;k++)
                       {
                           seriesLong += crossArray[k].Length/tableColumnCount;
                       }
                       string test = crossArray[i][j,2];
                       objChart.SeriesCollection[seriesLong + j].SetData (OWC10.ChartDimensionsEnum.chDimValues,(int)OWC10.ChartSpecialDataSourcesEnum.chDataLiteral, crossArray[i][j,2].ToString());
                   }
               }
           }
           //输出成gif
           string strFullPathAndName=System.Web.HttpContext.Current.Server.MapPath(".")+"\\images\\" + "picture.gif";
           //定义gif图片大小
           objCSpace.ExportPicture( strFullPathAndName, "gif", 800, 550);
           //gif图片的相对路径
           string strRelativePath="./images/" + getPictureName + ".gif";
           //返回gif图片的相对路径strRelativePath
           return strRelativePath;
       }
 
问题:棒图(分组)生成的图片,组与组间,间隔太大,而且当图例增加时,间隔宽度无太大变化!
学习

软件发布:24针打印机打印针及驱动电路测试程序 TP V1.0 关于文本的写问题,各位大哥帮帮我 vc++串口通信编程,谁有好用的控件,谢谢了 春天来了 软件发布:超级窗口管理器1.0 有关VC6中文版的问题?---就是创天的汉化版:( 软件发布:FALSH抓取&浏览 小弟求助! JSP代码在什么环境下编辑比较好(支持关键字符的高亮显示)? 软件发布:文件列表 软件发布:UCDOS下的大字打印程序 UCDZ v1.0 讨论applet安全机制 软件发布:超强跟踪调试程序ydebug v1.10 高手救命:我想画个价格走势图(折线图),看了《ASP 2.0揭秘》里的第三方组件有个shotgraph组件但画出来的是柱状图(程序如下),不知该怎么改,还有别的什么组件能画这种图吗? 高手请进:socket API问题 在wise中什么是表示安装目录的?就象IS for delphi5中的,我的数据库文件总放不进程序目录下的data中。 Linux 下编程入门的书那种好? ftp的代码 狂送240分!TDBGrid数据捆绑问题? 菜鸟提问,TListView如何用,如何动态的添加Items和SubItems? !!!送分题:SQL语言---- 如何在Where子句中使用变量?!(一定给分) 各位大哥,谁能告诉我在Activereports子报表中子报表的Rdo数据源怎么样来连结? 关于jdbc的问题? UNIX下的C程序中要从别的主机上取文件,如何使用FTP? 请问今年的高程考试,什么时候考??急!急!急!急!急! Form显示事件过程的问题!! 高手们请帮忙,NT启动不了 如何在代码编辑器中显示行号? 为何在2000 SERVER下安装ORALCE8i出错 我学c++遇到了问题