如何在StackedBar中值为零时隐藏数据点标签

时间:2009-03-20 17:48:50

标签: asp.net charts mschart

我有一个StackedBar,每条显示5个值,数据值显示在每个块的中间。到现在为止还挺好。但是,当值为零时,仍会显示该值,当存在​​大量零时,该值很混乱。

我希望能够将标签隐藏为零。我怎么能这样做?

(我认为我可以通过逐行读取数据并逐步构建图表来做到这一点,但我希望能够将查询结果抛出控件)。

7 个答案:

答案 0 :(得分: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;
            }
        }
    }
}

答案 1 :(得分:4)

Jim的解决方案对我不起作用,但这是我如何做到的,利用他的一些代码 - 感谢Jim!

  1. 在Designer中,在相关的Series元素下设置EmptyPointStyle元素。这应该将值设置为不显示为标签,而不是图例。
  2. 在代码隐藏中,使用DataBound或Customize事件通过将其IsEmpty属性设置为True来隐藏零点。
  3. <强>代码:

    1. 在ASPX中:

        <Series>
              <asp:Series ChartType="Pie" Name="Series1" ..etc....>
                  <EmptyPointStyle IsValueShownAsLabel="false" IsVisibleInLegend="false" />              
              </asp:Series>
        </Series>
      
    2. 在后面的代码中(在这里使用VB!):

    3. (注意:我必须在这个特定的饼图上爆炸所有点,这与这个问题无关,但我把它留在了,以防有人帮忙。)

      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
      

答案 2 :(得分:3)

这项工作非常适合我

  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;
        }
    }
  }

答案 3 :(得分:2)

使用抑制零的自定义数字格式,例如

一般;;;

0.0%;;;

$#,## 0.00 ;;;

答案 4 :(得分:2)

这个工作正常(我只测试了一个系列)

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;
     }
}

答案 5 :(得分:1)

这对我有用

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

答案 6 :(得分:0)

我遇到了同样的问题,我使用以下数字格式解决了它

[=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"