收录日期:2019/02/16 20:15:18 时间: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;
       }
 
问题:棒图(分组)生成的图片,组与组间,间隔太大,而且当图例增加时,间隔宽度无太大变化!
学习

谁强奸了你——为老项说句公道话 水晶报表导出(Export)功能的问题 急,硕士论文想做J2ME,谁给指个方向???? 请问foxmail 中的写邮件的界面上的Internet Explorer_Server控件怎么得到? 请教:怎样修改DW对象里面的属性值? 我做的一个通讯录,大家来扔鸡蛋啊! 刚刚忘了下载地址 ADSL猫可以远程调试吗? 老调新谈,不知各位对如今的盗版软件市场持何态度?? 装好VISUALSTUDIO.NET后, 发现光盘上没有VB.的例子 问个算法问题,请给个详细的解决方案,或者给个解决的例子 再次求助,辛苦各位了! 如何将一副图像输出到指定的显卡上去??(在单显示器,双显卡的情况下) 请问ASP。NET如何访问管理工具---》性能中的性能对象呢? 请教个算法的问题,麻烦给个详细的解决方案,谢谢 如何删除磁盘上的一个文件??????请大师指教 treeview问题 关于信使服务.老是不断发来.请各位大峡帮帮手 一个算法问题,请指点一下 奇怪的问题,如何在MDI工具栏上显示当前时间? 求最新的ip地址分配表 请问哪有好的系统集成方面的网站或论坛呀? 请有经验的各位参谋一下,以我的情况今年5月去考高程能过否? 叶子Excel最新版本,支持拼音输入,画面精美绝伦 在Turbo C中如何用转义序列?-----急!!! 高分请教:windows平台下oracle8i如何手工转移数据库 (接着散88分)开学了,最后一学期,喔喔! 在英文版linux下怎样安装其他语言 有关进程的问题 关于window server2003的一个问题 ^_^,问题又来了