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

高分请问:用ajax做一个在线考试系统,会大大减轻服务器负担吗?意义大吗? 欢迎大家加入数据库群 tomcat4.x到5.x哪个版本比较稳定,成熟,效率高,安全? 内存泄露--------用checkmem.pas的单元生成了CheckMemory.Log后,怎么样查代码 提示不存在变量定义? 欢迎大家加入数据库群 来散分了~~ 像本站注册页面的表单判断,请能给点代码提示 关于Application.ProcessMessages的问题 求教:word打印报表问题 欢迎大家加入java群 求教:word打印报表问题 欢迎大家加入java群 欢迎大家加入数据库群 三层交换机和2层交换机区别? 欢迎大家加入java群 portal和active directory如何互相管理 @符号的问题!! 请问:datalist可以嵌套表格吗? 求好的报表能支持tomcat 的 问题解决就给分 请帮我看看这个并发控制中锁的问题!谢谢! 欢迎大家加入linux群 关于Excel进程问题 欢迎大家加入数据库群 怎样在TXT文件里添加文本 在一个程序得主页面中,有两个webbrowser控件,如何能点击左边网页中得链接后在右边得浏览器中出现链接页面 欢迎大家加入linux群 有关sql的问题 不想使用Applet,有什么可以代替他的呢? 欢迎大家加入linux群