2009-03-20 11 views
7

Mam StackedBar, który pokazuje 5 wartości na pasek, z wartością danych wyświetlaną w środku każdego bloku. Jak na razie dobrze. Jednakże, gdy wartość wynosi zero, wartość jest nadal wyświetlana, co jest kłopotliwe, gdy występuje dużo zer.Jak ukryć etykietę rekordu danych, gdy wartość wynosi zero w StackedBar

Chciałbym móc ukryć etykietę za zero. Jak mogę to zrobić?

(Przypuszczam, że mogłem zrobić to na dłuższą metę, czytając dane wiersz po rzędzie i budując wykres krok po kroku, ale wolałbym móc po prostu rzucić wyniki zapytania pod kontrolą) .

Odpowiedz

5

Można ukryć etykiety w przypadku Dostosuj:

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

użyć niestandardowego formatu liczb, które tłumi zera, coś

generalnego ;;;

0,0% ;;;

$ #, ## 0,00 ;;;

0

miałem ten sam problem i rozwiązać go za pomocą następującego formatu liczb

[=0]"";0.0% 

Pierwsza część:

[=0]"" 

oznacza, że: jeśli wartość jest równa zero powinno wyświetlać pusty ciąg

druga część:

0.0% 

W tym konkretnym przypadku oznacza, że ​​wszystkie inne wartości powinny być wyświetlane jako procent z jedną częścią dziesiętną. Jako drugą część można użyć dowolnego formatu liczbowego.

[=0];General (Standard in some localized versions of Excel) 

może być użyty do używania formatu domyślnego.

Korzystanie VBA byłoby: rozwiązanie

Dim area as range 
'The data area for the chart' 
set area = Sheet1.range("A1:B3") 
area.NumberFormat = "[=0];General" 
4

Jima nie działa dla mnie, ale tutaj jest, jak to zrobiłem, wykorzystując niektóre z jego kod - dzięki Jim!

  1. W produkcie Designer ustaw element EmptyPointStyle pod odpowiednim elementem Series. Powinno to ustawić wartość, aby nie była pokazywana jako etykieta, a nie w legendzie.
  2. W kodzie z tyłu, użyj zdarzenia DataBound lub Customize, aby ukryć punkty zerowe, ustawiając ich właściwość IsEmpty na True.

Kod:

  1. W aspx:

    <Series> 
         <asp:Series ChartType="Pie" Name="Series1" ..etc....> 
          <EmptyPointStyle IsValueShownAsLabel="false" IsVisibleInLegend="false" />    
         </asp:Series> 
        </Series> 
    
  2. W Kodeksie tyłu (tak przy użyciu VB tutaj!):

(Uwaga:. Mam do wybuchu wszystkie punkty dotyczące tego konkretnego wykresu kołowego, a także, co nie jest istotne dla tej kwestii, ale zostawiłem go w przypadku pomaga ktoś)

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 
+0

mam zaznaczone to, bo konwertowane do C# point.IsEmpty = true to klucz do sukcesu, to jest wymagane, gdy trzeba point.IsValueShownAsLabel = true, a następnie ustawienie Series [chartSeries] .LabelFormat = "mm: ss"; – peterincumbria

3

praca ta idealnie dla mnie

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

to pracuje dla mnie

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 
2

To działało poprawnie (testowałem go tylko dla jednej serii)

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; 
    } 
} 
Powiązane problemy