Microsoft ReportViewer:自定义Y轴标签以匹配特定格式

时间:2017-02-07 18:05:45

标签: c# visual-studio customization reportviewer yaxis

我想自定义使用Microsoft ReportViewer绘制的图形的Y轴标签。 我想要的是拥有如下逻辑:

If (value>1000000)
   return value/1000000 & "M"
else 
   return value

例如,如果标签的值是12000000,那么标签值将是12M,否则如果标签值是1200,则值将保持为1200.

我尝试自定义数字格式以获得类似的行为:

= iif(value>1000000,value/1000000 'M',value)

(为了帮助我提问我的问题,我正在谈论这个窗口=> https://dotnetblurb.files.wordpress.com/2012/05/3.jpg

但是,正如预期的那样,它没有用。

谷歌搜索也没有多大帮助,似乎这种定制是不可能的。或者是吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我使用表达式窗口和更改图形的数据源内容解决了这个问题。

在填充数据源的方法中,我添加了将大数字转换为较小数字的逻辑:

reportModel.MillionsSymbol = "";
if (reportModel.TotalValue > 1000000)
{
      reportModel.TotalValue /= 1000000;
      reportModel.MillionsSymbol = "M ";
}

我还在我的数据源中添加了新的MillionsSymbol字段,并根据TotalValue更改了其内容。

然后,我可以在对话框Vertical Axis Properties - >中使用这个新字段。数字 - >类别[自定义]

="0.00" & Fields!MillionsSymbol.Value

Expressions window

这里的技巧是我写了一个表达式,它返回一个字符串,其中包含格式化轴号标签的函数所需的字符掩码。在这个字符串中,我可以放任何东西,只要它包含掩码(0.00,#。##,...)。

此方法允许我将变量连接到将作为图形垂直轴的每个刻度的标签显示的值。它不允许我处理该值,因为我没有找到任何方法来访问它。这就是我更改数据源中的值的原因。但是,通过这种方式,我正在改变图形点的值,然后相应地将垂直轴标记为值。

最终结果:

enter image description here

*为清晰起见编辑了图像