告别.NET生成报表统计图的烦恼(二)

作者:互联网   出处:控件中国网   2014-11-05 19:15:25   阅读:1

/// <summary>
        
/// 生成统计图片的数据源模型(单一或对比图都可以)
       
/// </summary>
        
/// <returns></returns>

        private SeriesCollection GetDataSource()
        
{
            SeriesCollection SC 
= new SeriesCollection();
            Random rd 
= new Random();

            
//DataTable newTable = new DataTable();
            
//newTable.Columns.Add("Month", typeof(int));//月份
            
//newTable.Columns.Add("Count", typeof(float));//载客量
            
//for (int i = 1; i <= 12; i++)
            
//{
            
//    newTable.Rows.Add(new object[] { i, rd.Next(50) });
            
//}
            ////生成单一图,将返回的DataTable数据处理成序列集合类型的数据,以便保持数据源类型的统一
            //Series s = new Series();
            
//s.Name = "载客量合计";
            
//for (int b = 1; b <= 12; b++) //X轴尺度个数,如一年12个月表示有12个尺度数
            
//{
            
//    Element e = new Element();
            
//    e.Name = b.ToString();//对应于X轴个尺度的名称
            
//    e.YValue = rd.Next(50);//与X轴对应的Y轴的数值
            
//    s.Elements.Add(e);
            
//}
            
//SC.Add(s);

            
// 生成对比图
            for (int a = 1; a <= 2; a++//对比的项数,如2008年各月的公交和地铁载客量数据对比就相当于有两个数据项
            {
                Series s 
= new Series();
                s.Name 
= (a == 1 ? "公交载客量合计" : "地铁载客量合计");//各个数据项代表的名称,如公交和地铁12个月载客量走势图,则一条表示公交,一条表示地铁
                for (int b = 1; b <= 12; b++//X轴尺度个数,如12个月表示有12个尺度数
                {
                    Element e 
= new Element();
                    e.Name 
= b.ToString();//对应于X轴个尺度的名称
                    e.YValue = rd.Next(50);//与X轴对应的Y轴的数值
                    s.Elements.Add(e);
                }

                SC.Add(s);
            }

  

            
//可自定义填充图的填充色,系统采取默认分配各数据项的填充色
            
//SC[0].DefaultElement.Color = Color.Blue;
            
//SC[1].DefaultElement.Color = Color.Red;
            
//SC[2].DefaultElement.Color = Color.FromArgb(255, 99, 49);
            
//SC[3].DefaultElement.Color = Color.FromArgb(0, 156, 255);
            return SC;
        }

 /// <summary>
        
/// 生成统计图片
        
/// </summary>
        
/// <param name="chart"></param>
        
/// <param name="type">图形类别,如柱状,折线型</param>

        public void CreateStatisticPic(dotnetCHARTING.Chart chart)
        
{
            chart.Title 
= this.Title;
            chart.XAxis.Label.Text 
= this.XTitle;
            chart.YAxis.Label.Text 
= this.YTitle;
            chart.TempDirectory 
= this.PhaysicalImagePath;
            chart.FileManager.FileName 
= this.FileName;
            chart.Width 
= this.PicWidth;
            chart.Height 
= this.PicHight;
            chart.Type 
= ChartType.Combo;
            
//chart.Series.Type = this.Type;//生成对比的线型图时不适用
             chart.DefaultSeries.Type = this.Type; //统一使用默认的序列图类型属性
             chart.Series.Name = this.SeriesName;
            chart.SeriesCollection.Add(
this.DataSource);
            chart.DefaultSeries.DefaultElement.ShowValue 
= true;
            chart.ShadingEffect 
= true;
            chart.Use3D 
= this.Use3D;
            chart.Series.DefaultElement.ShowValue 
= true;
        }

 

本文最后给出的下载示例中,统一采用数据源为序列集合,原本定义了两种类型的数据源SeriesCollectionDataTable,后来有想过定义一个泛型或

IDataSource接受不同的数据源,觉得还是不怎么好,就统一用序列数据源类型。

 

三、柱状和折线型的叠加(其实也属于对比图的一类)

应用场景如,公交和地铁某年12个月的载客量对比,同时还要反映出12个公交和地铁的发车次数的对比, 这时就要求纵轴的左右两边都有尺度,左边纵轴可以

对应载客量,右边纵轴可以对应发车次数,这种意义在于,可以看到在发车量相同的情况下,载客量对比是怎样的,发车量不同的情况下,载客量又有什么变化,

通过这种对比可以制定方案对那些线路增加或减少发车次数,有点点类似于下面这样的图

 
 

上图不算是一个完整的图,因为柱状和折线都少了一个对比,而且右边的纵轴没有刻度,但是这也是可以做到的

dotnetcharting官方网上近千个样图中其中我看到一个类似的http://www.dotnetcharting.com/gallery/view.aspx?id=RateCharts,

做一下处理是可以满足要求的。

PS:引用的dotnetcharting.dll有隐藏的链接,就是生成出来的统计图的上边和下边的,当鼠标移上去时有导向.netCHARTING网站的链接,简单

用JS脚本移除了链接的map标签(网上给的方法是修改IL代码后重新生成破解的dll,没试过)。

 

总之,应用这个组件绘统计图确实带来了很大的方便和灵活性。

最后该小demo下载地址给出 :demo下载 (本文由控件中国网转载)

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat