7

我有一个 StackedBar,每条显示 5 个值,数据值显示在每个块的中间。到目前为止,一切都很好。但是,当值为零时,仍然显示该值,当有很多零时,这很混乱。

我希望能够将标签隐藏为零。我怎样才能做到这一点?

(我想我可以通过逐行读取数据并逐步构建图表来完成这项工作,但我更希望能够将查询结果扔给控件)。

4

7 回答 7

6

您可以在自定义事件中隐藏标签:

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;
            }
        }
    }
}
于 2009-07-08T15:03:08.623 回答
4

吉姆的解决方案对我不起作用,但我是这样做的,利用他的一些代码 - 谢谢吉姆!

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

代码:

  1. 在 ASPX 中:

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

(注意:我还必须分解这个特定饼图上的所有点,这与这个问题无关,但我把它留在了,以防它帮助某人。)

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
于 2012-02-29T05:26:00.147 回答
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;
        }
    }
  }
于 2012-09-13T11:45:14.597 回答
2

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

一般的;;;

0.0%;;;

$#,##0.00;;;

于 2009-11-12T17:54:45.380 回答
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;
     }
}
于 2016-11-29T08:06:14.990 回答
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
于 2014-12-05T09:13:09.760 回答
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"
于 2009-11-21T21:44:51.947 回答