您的位置:首页 > 其它

告别.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下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: