告别.NET生成报表统计图的烦恼
2016-04-15 18:22
246 查看
告别.NET生成报表统计图的烦恼
标签: 报表.netstatistics图形数据库文档2009-10-09 12:00 635人阅读 评论(0) 收藏 举报
private DataTable GetDataSource()
private void Drawing()
public void CreateStatisticPic(dotnetCHARTING.Chart chart)
private SeriesCollection GetDataSource()
public void CreateStatisticPic(dotnetCHARTING.Chart chart)
本文最后给出的下载示例中,统一采用数据源为序列集合,原本定义了两种类型的数据源SeriesCollection和DataTable,后来有想过定义一个泛型或
IDataSource接受不同的数据源,觉得还是不怎么好,就统一用序列数据源类型。
三、柱状和折线型的叠加(其实也属于对比图的一类)
应用场景如,公交和地铁某年12个月的载客量对比,同时还要反映出12个公交和地铁的发车次数的对比, 这时就要求纵轴的左右两边都有尺度,左边纵轴可以
对应载客量,右边纵轴可以对应发车次数,这种意义在于,可以看到在发车量相同的情况下,载客量对比是怎样的,发车量不同的情况下,载客量又有什么变化,
通过这种对比可以制定方案对那些线路增加或减少发车次数,有点点类似于下面这样的图
private SeriesCollection GetDataSource()
{
SeriesCollection SC = new SeriesCollection();
Random rd = new Random();
Series s;
// 生成对比图
for (int a = 1; a <= 2; a++) //对比的项数,如2008年各月的公交和地铁载客量数据对比就相当于有两个数据项
{
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);
}
Axis ctrAxis = new Axis("发车次数"); //只绘一次右轴
for (int a = 1; a <= 2; a++) //发车此数对比
{
s = new Series();
ctrAxis.Orientation = dotnetCHARTING.Orientation.Right;
s.YAxis = ctrAxis;
s.Type = SeriesType.Line;
s.Name = (a == 1 ? "公交发车次数" : "地铁发车次数");
for (int b = 1; b <= 12; b++)
{
Element e = new Element();
e.Name = b.ToString();
e.YValue = 100 + rd.Next(500);
s.Elements.Add(e);
}
//s.DefaultElement.Color = a == 1? Color.Pink : Color.SpringGreen;
SC.Add(s);
}
SC[0].DefaultElement.Color = Color.FromArgb(49, 255, 49);
SC[1].DefaultElement.Color = Color.FromArgb(255, 255, 0);
SC[2].DefaultElement.Color = Color.FromArgb(255, 99, 49);
SC[3].DefaultElement.Color = Color.FromArgb(0, 156, 255);
return SC;
}
图例在右侧有点不雅,可以设置属性和标题在一行显示,那样就比较好了,但是那样的该版本不显合计,也可以设置不显示图例,最新的版本的
我看了下效果很不错,也截个图看下
上图新版本可以设置这样的属性 Chart1.TitleBox.Position = TitleBoxPosition.FullWithLegend;
Chart1.TitleBox.Label.Alignment = StringAlignment.Center;
本文的版本属性是这样的:
chart.TitleBox.Position = TitleBoxPosition.FullWithLegend;//图例在标题行显示,但是没有合计信息
//chart.LegendBox.Position = LegendBoxPosition.None; 不显示图例,指不在右侧显示,对上面一行的属性设置并没有影响
另:柱形的宽度设置,也就是X轴的步长设置,这个问题一直没解决,后来找到开发文档看了才知道,是这样的设置的
chart.XAxis.StaticColumnWidth = 50; 避免X轴上坐标点少时,柱形很粗,但是要注意
一旦这样设置了,就都是这样的宽度,如果不设置就动态均匀分配部长。
(demo就不更新了)
PS:引用的dotnetcharting.dll有隐藏的链接,就是生成出来的统计图的上边和下边的,当鼠标移上去时有导向.netcharting网站的链接,简单
用JS脚本移除了链接的map标签(网上给的方法是修改IL代码后重新生成破解的dll,没试过)。
总之,应用这个组件绘统计图确实带来了很大的方便和灵活性。
最后该小demo下载地址给出 :demo下载
相关文章推荐
- 认证模式之SSL模式
- EmguCV学习(三)
- C# 扩展方法验证居民身份证
- 使用MariaDB数据库管理系统。
- Fragment的生命周期
- 认证模式之SSL模式
- 多线程笔记
- 让VS15 支持 Entity Framework Power Tools
- Windows Batch Scripts
- 【JVM】方法字节码signature和descriptor的区别
- CALayer层的属性
- 使用AVD时的dp问题
- 微信硬件蓝牙开发各种坑不完全开发指南
- sort 排序的结果为什么与strcmp不一样
- IOS -Xcode7 使用NSURLSession发送HTTP请求报错
- iOS之QQ粘性布局
- oracle HA 高可用性具体解释(之二,深入解析TAF,以及HA框架)
- 浅谈ASP.NET报表控件
- 使用 Retrofit 操作 SOAP Web Service --- 已成功调试
- golang 走起(五) Profile 的应用