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

关于使用Jmail组件发邮件的问题(请高手指教) 我有UNIX下的五笔练习软件。需要的联系我。 有用过FCKeditor 在线编辑器的朋友进来帮忙~~~~~~~~~~~~~ 请高手解决!!!!!!!!!!!一个标准的问题 请问如何控制IE滚动条的宽度? 谁能给个ComponentArt Web.UI 2006.1252.1 for asp.net1.1破解版,谢谢 求助关于子域名解析的问题,搞过域名解析的朋友进来帮忙看看.谢谢! 关于点击“保存”按钮之前的判断 异构系统间通讯的问题 如何判断一个字符串中是否有指定字符? 改变鼠标形状 Servlet小问题,企求帮助! JDTS的执行存储过程的问题。 高手请进,ajaxpro+asp.net问题,100分相送 怎样在同一个数据窗口中实现多图形显示 页面A.htm用iframe的方法插入页面B.asp,在页面B中用了Request.ServerVariables(\"HTTP_url\")获取url地址。 关于软件的暂时试用版的制作问题 无法建立以 link为后缀得文件,怎么回事? 圆的移动 关于VB编程求助: 静态页面中怎么统一调用头文件? 大家来讨论讨论,在程序的设计中的计量单位是怎样设计的? 这样处理怎样分页!急 怎样拿一张照片做窗体的背景? 为什么当别的窗体在我的自画窗体上移动的时候,……自画高手请进! 放分请教WebBrowser的几个问题 倒粪了。。。。。。。。。。。 如何显示数据库中一字段精确时间 再线等 tapestry4.1用Contrib:Table问题 正则表达式 全角空格