0

我想自定义使用 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

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

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

非常感谢!

4

1 回答 1

0

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

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

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

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

然后,我可以在对话框 Vertical Axis Properties -> Number -> Category[custom] 中使用这个新字段

="0.00" & Fields!MillionsSymbol.Value

表达式窗口

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

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

最后结果:

在此处输入图像描述

*为清晰起见已编辑图像

于 2017-02-08T11:44:44.563 回答