我有一个StackedBar,每个条形图显示5个值,并在每个块的中间显示数据值。到目前为止,一切正常。然而,当值为零时,仍然显示该值,当零很多时会显得混乱。
我想隐藏零的标签。我该如何做?
(我认为我可以通过逐行阅读数据并逐步构建图表来完成这项工作,但我更愿意能够将查询结果直接传递给控件)。
我想隐藏零的标签。我该如何做?
(我认为我可以通过逐行阅读数据并逐步构建图表来完成这项工作,但我更愿意能够将查询结果直接传递给控件)。
您可以在“自定义事件”中隐藏标签:
protected void SummaryChart_Customize(object sender, EventArgs e)
{
//hide label value if zero
foreach (System.Web.UI.DataVisualization.Charting.Series series in SummaryChart.Series)
{
foreach (System.Web.UI.DataVisualization.Charting.DataPoint point in series.Points)
{
if (point.YValues.Length > 0 && (double)point.YValues.GetValue(0) == 0)
{
point.IsValueShownAsLabel = false;
}
else
{
point.IsValueShownAsLabel = true;
}
}
}
}
foreach (System.Web.UI.DataVisualization.Charting.Series series in SummaryChart.Series)
{
foreach (System.Web.UI.DataVisualization.Charting.DataPoint point in series.Points)
{
if (point.YValues.Length > 0 && (double)point.YValues.GetValue(0) == 0)
{
point.LegendText = point.AxisLabel;//In case you have legend
point.AxisLabel = string.Empty;
point.Label = string.Empty;
}
}
}
Jim的解决方案对我没用,但是在他的代码基础上,我找到了解决方法 - 谢谢Jim!
代码:
In the ASPX:
<Series>
<asp:Series ChartType="Pie" Name="Series1" ..etc....>
<EmptyPointStyle IsValueShownAsLabel="false" IsVisibleInLegend="false" />
</asp:Series>
</Series>
In the Code behind (yep using VB here!):
Protected Sub Chart1_DataBound(sender As Object, e As EventArgs) Handles Chart1.DataBound
Dim chart As Chart = TryCast(sender, Chart)
If chart IsNot Nothing Then
' Explode all points
For Each p As DataPoint In chart.Series(0).Points
p.CustomProperties = "Exploded=true"
' Remove zero points
If p.YValues.Length > 0 AndAlso p.YValues.GetValue(0) = 0 Then
p.IsEmpty = True
End If
Next
End If
End Sub
这个功能正常工作(我只测试了一个系列)
foreach (System.Windows.Forms.DataVisualization.Charting.DataPoint point in chartShow.Series["S3"].Points)
{
if (point.YValues.Length > 0 && (double)point.YValues.GetValue(0) == 0)
{
point.IsEmpty = true;
}
else
{
point.IsEmpty = false;
}
}
使用自定义数字格式来抑制零,例如
常规;;;
0.0%;;;
$#,##0.00;;;
这对我来说有效
For Each s As Series In Chart1.Series
For Each dp As DataPoint In s.Points
If dp.YValues(0) = 0 Then
dp.IsEmpty = True
End If
Next
Next
我曾经遇到过同样的问题,我使用以下数字格式解决了它
[=0]"";0.0%
第一部分:
[=0]""
意思是:如果值等于零,则应显示空字符串。
第二部分:
0.0%
[=0];General (Standard in some localized versions of Excel)
可以用于使用默认格式。
使用VBA,代码如下:
Dim area as range
'The data area for the chart'
set area = Sheet1.range("A1:B3")
area.NumberFormat = "[=0];General"