如何让Chart的Y轴或2nd Y轴只显示最大值和最小值?
原理很简单,就是设置Y轴的interval是此轴的最大值即可,但是interval是不支持Expression表达式来获取Y轴最大值的,那么就需要在Dundas中写Code来实现。
在Dundas的属性设置窗口中选择Advanced,单击ViewCode按钮,在下拉列表中选择PostApplyData方法,C#实现代码如下:
// Parameter: chartObj - represents the chart object
chartObj.ChartAreas[0].AxisY.Interval=
chartObj.ChartAreas[0].AxisY.Maximum-chartObj.ChartAreas[0].AxisY.Minimum;
完成后单击Compile按钮,下方出现Compiled OK后Code即生效,运行Report即可看见效果。
使用了Series Groups后如果自定义每个Series的颜色或者Maker类型?
当你在Dundas中使用了Series Groups,那个每个添加到Dundas的Series都会依据这它来分组显示。并且分组出来的Series的颜色是Dundas随机定义的。要想修改分组出来的Series的颜色或者其Maker设置,也可以通过在Dundas中写Code来实现。
在Dundas中,每个Series都有一个默认的Name,分别是"Series 1"、"Series 2"...依次排下去。我们只要分别判断每个Series的Name,然后再分别采用不同的设置即可。在Dundas的属性设置窗口中选择Advanced,单击ViewCode按钮,在下拉列表中选择PrePaint方法,C#示例Code如下:
// Parameter: chartObj - represents the chart object
// Parameter: sender - the chart object that will be painted
if( sender is Series ){
Series series = (Series) sender;
switch(series.Name){
case "Series 1":
series.Color=Color.LightYellow;
series.MarkerStyle=MarkerStyle.Diamond;
break;
case "Series 2":
series.Color=Color.Red;
series.MarkerStyle=MarkerStyle.Square;
break;
}
}
完成后单击Compile按钮,下方出现Compiled OK后Code即生效,运行Report即可看见效果。
如果Series出现的顺序不固定,那么我们还可以通过LegendText来判断Series。LegendText的值是在Series Groups中用来group的那一列的值。我们可以用switch(series.LegendText)来判断。
1. Float 参数的BUG
当你在Report中设置某个参数类型是Float时产生此BUG,Reporting Service在显示Float参数时会出现莫名奇妙的四舍五入成两位小数,索性的是这种错误只停留在显示上,报表的内部运算仍旧按照参数的实际小数位数进行运算。
解决方法是将Float 参数改为string类型,然后在用的时候将参数转换为小数。
2.更新Report,其Linked Report参数不能同步更新
Linked Report虽然使用的是Report的Definition,但是它自己有它自己的参数设置。建立Linked Report时,RS会复制Report中的所有参数给Linked Report一份。此问题出现在当你在报表服务器上使用一个Report建立了Linked Report后,修改此Report的参数,例如添加一个下拉列表值,修改参数类型等等操作,随后使用覆盖Update的方式更新报表服务器上的Report时,其所建立的Linked Reports参数不会自动更新,从而出现参数不同步的现象。
目前此问题暂时没有好的解决方法,比较普遍的做法是删除Report的所有Linked Reports,重新建立,或者逐个修改每个Linked Report的Report Definition,使其Link到更新过的Report。我已经就此写了一个自动查找并更新Linked Report的小工具,需要的朋友可以发Email给我。