目中有报表图形化的需求, 于是开始在网上找第三方chart控件。因时间紧迫,在优快云中搜了几轮后大至确定了几个候选:一、Office带的OWC控件;二、ComponentOne;三、Web Chart。
OWC似乎使用者居多,但看见有网友在帖中抱怨OWC在使用时需要许可证书,于是将其排除,我可不想BOSS在看报表时弹出一个“没有许可证书”的窗口。
接着找到了ComponentOne的Web chart做出的各种效果图,效果极佳。我一下子被迷住了,决定就是它,于是马不停蹄的下了最新版100多M的安装文件,又花一上午找了个可以用的注册码,再找了篇教程,OK万事俱备,兴匆匆的开始写代码。需求不复杂,在一个页面上画出多条折线图即可,根据以往经验,这种大型商业共享软件在官方站点上看两个Example顶多一小时绝对能搞定的。但结果让我非常的恼火,官方的Example简单的它偏不提供,弄些什么AJAX的,一大堆实现辅助效果的代码,你要找的核心的那三四行打死也找不到,好像就怕你一下子把它的Example看明白了。历来讨厌这种软件。于是卸载、删除......等全部弄完,一天过去了。
还好,后来找到了Web Chart。代码超简洁,效果也还不错,写些简单的示例供大家参考:
一、折线图








































二、柱状图

private string [] myColor = new string []
{
" Fuchsia " ,
" Black " ,
" Gold " ,
" Blue " ,
" HotPink " ,
" Orange " ,
" Peru " ,
" DodgerBlue " ,
" Lime " ,
" Tan " ,
" Red " ,
" GreenYellow " ,
" DarkGreen " ,
" DimGray " ,
" Orchid "
};
// 调用该方法生成柱状图
private void bindchart()
{
// 获取一个DataTable,具体函数略...
DataTable dt = this .getdt();
if (dt != null )
{
if (dt.Rows.Count > 0 )
{
// 遍历DataTable为每条记录生成一个柱状
for ( int i = 0 ; i < dt.Rows.Count; i ++ )
{
// 创建对象
ColumnChart mychart = new ColumnChart();
// 设置柱子宽度
mychart.MaxColumnWidth = 48 ;
// 颜色
mychart.Fill.Color = Color.FromName( this .myColor[i]);
// 在柱子上显示数量
mychart.DataLabels.Visible = true ;
// 数量的字体
mychart.DataLabels.Font = new Font( " Verdana " , 14 );
// 添加
mychart.Data.Add( new ChartPoint( "" , float .Parse(dt.Rows[i][ " num " ].ToString())));
// 备注
mychart.Legend = dt.Rows[i][ " name " ].ToString();
this .chart.Charts.Add(mychart);
}
// 辅助设置
// 背景色
chart.Background.Color = Color.FromArgb( 165 , 0 , 16 );
chart.YAxisFont.ForeColor = Color.FromArgb( 165 , 0 , 16 );
chart.XAxisFont.ForeColor = Color.FromArgb( 165 , 0 , 16 );
// 内部线条
chart.Border.Color = Color.FromArgb( 200 , 200 , 200 );
// 边框样式
chart.BorderStyle = BorderStyle.None;
// y最大值
double max = double .Parse(dt.Compute( " MAX(num) " , "" ).ToString());
// 递增值
int intv = 2 ;
// 数量小于16的情况
if (max < 16 )
{
max = 16 ;
}
// 大于16的情况
else
{
intv = int .Parse(Math.Ceiling(max / 8 ).ToString());
max += intv;
}
// 设置Y轴终点值
chart.YCustomEnd = int .Parse(max.ToString());
// y递增值
chart.YValuesInterval = intv;
// 生成
this .chart.RedrawChart();
}
}
}