Как скрыть метку точки данных, когда значение равно нулю в StackedBar - PullRequest
7 голосов
/ 20 марта 2009

У меня есть StackedBar, который показывает 5 значений на бар, причем значение данных отображается в середине каждого блока. Все идет нормально. Однако, когда значение равно нулю, оно все равно отображается, что является грязным, когда много нулей.

Я хотел бы иметь возможность скрыть метку для нуля. Как я могу это сделать?

(Полагаю, я мог бы проделать длинный путь, читая данные построчно и шаг за шагом создавая график, но я бы предпочел иметь возможность просто выводить результаты запроса в элемент управления).

Ответы [ 7 ]

5 голосов
/ 08 июля 2009

Вы можете скрыть метки в событии Customize:

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;
            }
        }
    }
}
4 голосов
/ 29 февраля 2012

Решение Джима у меня не сработало, но вот как я это сделал, используя часть его кода - спасибо Джиму!

  1. В конструкторе установите элемент EmptyPointStyle под соответствующим элементом Series. Это должно установить значение, чтобы оно не отображалось как метка, а не в легенде.
  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
3 голосов
/ 13 сентября 2012

Это прекрасно для меня работает

  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;
        }
    }
  }
2 голосов
/ 29 ноября 2016

Это сработало правильно (я проверял только одну серию)

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;
     }
}
2 голосов
/ 12 ноября 2009

Используйте пользовательский формат чисел, который подавляет нули, что-то вроде

Общие ;;;

0,0% ;;;

$ #, ## 0,00 ;;;

1 голос
/ 05 декабря 2014

это работает для меня

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 голосов
/ 22 ноября 2009

У меня была такая же проблема, и я решил ее, используя следующий числовой формат

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