none
Chart: StackedColumn - Prozentwert in Tooltip RRS feed

  • Frage

  • Hallo liebe Forumsmitglieder,
    in einem StackedColumn-Chart möchte ich zusätzlich die Prozentwerte im Tooltip mit anzeigen.

    Ist denn das mit der derzeitigen Lösung irgendwie möglich?

    xChart.DataSource = MonitorList
      Dim sProdmenge As New Series("ProdMenge")
      Dim sAusschuss As New Series("Ausschuss")
    
      strYAxisTitle = "Stück"
    
      With sAusschuss
        .YValueMembers = "AUSSCHUSS"
        .ToolTip = "#VALX - Ausschuss: #VALY{#,##}"
        .LegendText = "Ausschuss"
        .Color = Color.FromArgb(240, 250, 50, 50)
      End With
    
      With sProdmenge
        .YValueMembers = "GUTSTUECK"
        .ToolTip = "#VALX - Gutteile: #VALY{#,##}"
        .YAxisType = AxisType.Primary
        .LegendText = "Gutteile"
        .Color = Color.FromArgb(120, 210, 120)
      End With
    
      With xChart.Series
        .Add(sProdmenge)
        .Add(sAusschuss)
      End With
    

    Die Herkunft ist eine Klasse die die Prozentwerte gleich mit liefert.
    Kann ich beim Zuweisen des Tooltips auf das andere Series-Object verweisen?
    Noch eine andere Frage: Kann ich einer Series eine Css-Klasse zuweisen? Wenn ja, wie?

    Vielen Dank.


    Viele Grüße, Volker

    Mittwoch, 24. Mai 2017 06:19

Antworten

  • Hallo Volker,

    Du kannst anstelle von #PERCENT natürlich auch einen beliebigen Wert in den Tooltip einbauen. Du musst dir nur den richtigen Wert in der Schleife ermitteln.

    Alternativ kannst Du evtl. auch mit einer CustomProperty arbeiten.

    Beim erstellen der DataPoints kannst Du dann den gewünschten Wert bspw. so angeben:

    For ...
    Dim Point As New DataPoint( ... )
        Point.SetCustomProperty( "Prozent", DeinWert.ToString() )
        Chart.Series( "<Series>" ).Points.Add( Point )
    Next

    Der Tooltip sollte dann so aussehen:

    "#VALY\n#VALX\n#CUSTOMPROPERTY(Prozent)"

    Siehe dazu:

      https://msdn.microsoft.com/en-us/library/dd456687.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community



    Donnerstag, 25. Mai 2017 08:36
    Moderator

Alle Antworten

  • Hallo Volker,

    willst Du die normalen Werte und zusätzlich die Prozentwerte anzeigen? Falls ja, wie soll das im Ergebnis aussehen?

    Ggfs. hilft dir dieser FormatString:

    For Each Point As DataPoint In <Chart>.Series( "<Series>" ).Point
        Point.Label = "#PERCENT\n#VALX"
    Next

    Ob das auch im Tooltip geht, weiß ich grade nicht, aber probier es einfach mal aus.

    Siehe dazu bspw.:

      https://stackoverflow.com/questions/24285696/adding-value-and-percentage-to-pie-chart-in-asp-net

    Bzgl. der CSS Klasse gibt es IIRC im ASP.NET Chart Control keine Möglichkeit, diese zuzuweisen. Du müsstest die einzelnen Styles selbst setzen. Siehe dazu:

      https://www.experts-exchange.com/questions/28489902/Applying-style-to-the-asp-net-c.html


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 24. Mai 2017 06:39
    Moderator
  • Hallo Stefan,
    vielen Dank für dein Interesse.
    Ja, ich möchte die normalen Werte mit Anzeigen lassen (siehe Grafik).
    Im Tooltip sollen dann eben die Stückzahlen und auch der prozentuale Anteil der Monatssumme Gut+Ausschuss enthalten sein.
    Mit der vorgeschlagenen Lösung wird allerdings ein Prozentwert angezeigt, der nicht passt (so wie es aussieht, ist das anteilige Wert der Summe aller Werte des Series-Objects).

    Das mit dem CSS hab ich mir schon so gedacht.


    Viele Grüße, Volker

    Mittwoch, 24. Mai 2017 07:27
  • Hallo Volker,

    Du kannst anstelle von #PERCENT natürlich auch einen beliebigen Wert in den Tooltip einbauen. Du musst dir nur den richtigen Wert in der Schleife ermitteln.

    Alternativ kannst Du evtl. auch mit einer CustomProperty arbeiten.

    Beim erstellen der DataPoints kannst Du dann den gewünschten Wert bspw. so angeben:

    For ...
    Dim Point As New DataPoint( ... )
        Point.SetCustomProperty( "Prozent", DeinWert.ToString() )
        Chart.Series( "<Series>" ).Points.Add( Point )
    Next

    Der Tooltip sollte dann so aussehen:

    "#VALY\n#VALX\n#CUSTOMPROPERTY(Prozent)"

    Siehe dazu:

      https://msdn.microsoft.com/en-us/library/dd456687.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community



    Donnerstag, 25. Mai 2017 08:36
    Moderator
  • Hallo Stefan,
    also wenn ich dich richtig verstanden habe, dann weise ich dem Chart keinen DataSource zu, sondern setze die DataPoints manuell. Aber da könnte ich ja dann den Tooltip direkt zuweisen, ohne über ein SetCustomProperty...

    For Each element in MonitorList Dim dpA As New DataPoint 'Ausschuss
    Dim dpG As New DataPoint 'Gutteile
    Dim intSumme As Integer = element.Prodmenge+element.Ausschuss

    Dim pWertA As decimal = element.Ausschuss/intSumme * 100
    Dim pWertG as decimal = element.Prodmenge/intSumme * 100

    dpA.Tooltip=String.Format("Ausschuss: {0} %", pWertA)
    dpG.Tooltip=String.Format("Gutteile: {0} %", pWertG)

    xChart.Series("Prodmenge").Points.Add(dpA)
    xChart.Series("Ausschuss").Points.Add(dpG)

    Next

    Oder kann ich besser die Datapoints direkt dem zuvor instanzierten SeriesObject zuweisen?
    Ich muss ehrlich gestehen, die MSDN-Hilfe ist mit Beispielen dazu recht dünn gesät.

    Das muss ich dann am Montag mal versuchen.
    Vielen Dank für deinen Tipp.

    Einen schönen Feiertag und Prost!

    ;)


    Viele Grüße, Volker



    • Bearbeitet Volker S Donnerstag, 25. Mai 2017 11:11
    Donnerstag, 25. Mai 2017 11:09
  • Hallo Volker,

    das geht sicher auch über die Zuweisung einer DataSource, allerdings muss pro Point dann trotzdem die CustomProperty gesetzt werden, Du müsstest also nach dem DataBind noch die DataPoints durchlaufen und den Wert setzen.

    Ich hab schon ewig kein Chart Control mehr verwendet, daher hab ich das nur mit dem manuellen Erstellen der DataPoints probiert.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 25. Mai 2017 12:19
    Moderator
  • Hallo Stefan,
    da hatte ich doch einen Denkfehler. Es funktioniert genau so, wie zuvor von dir beschrieben.

    Vielen herzlichen Dank für deine Unterstützung.


    Viele Grüße, Volker


    • Bearbeitet Volker S Montag, 29. Mai 2017 06:12
    Montag, 29. Mai 2017 06:12