Chart - Sample

    • VB.NET

    Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

      Chart - Sample

      Hi!

      Hier mal ein Sample, wie man was mittm Chart - Control einstellen kann.
      ChartControl ist ähnlich DatagridView auf Databinding ausgelegt, nur präsentiert es die Daten natürlich ganz anners, und ist Readonly.
      Aber ebenso wie beim DGV gibt man auch hier eine BindingSource als DataSource an, und kann dann Series hinzufügen, und daran herum-konfigurieren, dasses nurso kracht.
      Ich hab hiermal eine fiktive Forum-Statistik gebastelt, bei der die Anzahlen von Neuregistrierungen und LogIns aufgenommen wurden - also 2 Series im Chart:


      Die Daten liegen in einer Tabelle im typisierten Dataset vor - ihr wisst ja: ich kannix anneres ;)

      (Zum Thema typisiertes Dataset verweise ich auf meine Tuts im Datenbank-Tutorial - Bereich.)

      Achso: Codemäßig gibt dieses "Tut" zum Thema ChartControl eigentlich garnichts her.
      Der enthaltene Code kümmert sich ausschließlich um Laden und Speichern der Daten, und eine "Speichern?" - Abfrage beim FormClosing ist drin und solche Sachen.

      Was am Chart gemacht ist, ist ausschließlich im Form-Designer gemacht - ich zeige mal die doch etwas komplexen Dialoge:

      Im Series - Dialog der LogIns-Serie sind folgende Einstellungen vorgenommen:
      • XValueMember: "Day"
      • XValueType: "DateTime"
      • YValueMembers: "LogIns"
      • YValueType: "Int32"
        Diese 4 Einstellungen sind entscheidend: Auf der X-Achse wird das Datum aufgetragen (Datentyp DateTime) und die Y-Achse kriegt die LogIns, welches sind ja Integer

      • Color: "Blue"

      • ChartType: "Spline"
        Das macht diese hübsche Ausgleichskurve durch die Punkte. Es gibt auch ChartType.Line, .Bar, .Pie und ca. 20 weitere Optionen, aber in meiner Vorstellung ist ein Chart halt erstmal ein LinienChart, vorzugsweise mit Ausgleichskurve ;).

      • MarkerStyle: "Diamond"
        gfällt mir auch am besten - vlt. hätte ich eine größere MarkerSize nehmen sollen - man erkennt die Kostbarkeiten kaum.

      • ChartArea: ChartArea1
        Das ChartArea war so voreingestellt, aber ist glaub wichtig. Son ChartArea kann mit mehreren Series verknüpft sein, und stellt eine ihnen gemeinsame Beschriftung bereit - komme ich als nächstes zu.



      Am ChartArea habich eiglich garnix rumgeschraubt, sondern gleich die darin enthaltene Axes-Auflistung geöffnet, die X-axis angewählt, und vonne X-axis den LabelStyle erweitert, um dann endlich - puh! - den Format-String "d.MM" einzugeben.
      Dieser Formatstring formatiert nun die Datum-Beschriftungen der X-Achse so, dass nur Tag und Monat angezeigt werden, nicht das Jahr.

      Also wers noch nicht bemerkt hat: Es ist ein bisserl verzwickt, verzwackt und verschachtelt, aber die Möglichkeiten sind mächtig gewaltig ;)


      Letzter Link: MSDN-CodeGallery: WinForms-Chartcontrol-Samples - leider ungültig geworden, Ersatz siehe Post#4
      Das ist ein geniales Demo-Programm, und zeigt in über 100 Beispielen ungefähr alles, was das Chart-Control kann.
      Beeindruckend finde ich das Live-Chart, also die Performance reicht auch für kontinuirliche Aktualisierung auch großer Datenmengen.
      Ebenfalls sehr schick die Navigations-Samples: Man kann mit der Maus im Chart herumfahren, und bekommt Werte angezeigt, oder man kann per Tastatur den Focus von einem Messpunkt zum nächsten verschieben und so Scherze.
      Hat aber 2 Probleme:
      1. ist c#
      2. Der Autor hat offensichtlich geplant, auch eine vb-Version zu erstellen, und deswegen einen \c#-Ordner eingefügt. Dann aber nicht weiter-gemacht, und auch vergessen, alle möglichen Pfade anzupassen. :thumbdown:
        Lösung: Der ganze Kram aus dem c#-Ordner muss raus und eine Ordner-ebene höher verschoben werden.
        Dann passt wieder alles, und der Laden läuft geschmiert wie die Banken-Rettung in Griechenland.
      Allerletzter Link: Anzahl DatenPunkte fixieren
      @robot91 fund neulich in den Tiefen der Einstellungsmöglichkeiten eine, mit der man ein scrollbares Chart erhält, wo sich nicht alle Datenpunkte zusammendrängeln, sondern wo sich das Chart bei "Überfüllung" dann virtuell erweitert und eine Scrollbar bereitstellt:

      VB.NET-Quellcode

      1. Chart1.ChartAreas(0).AxisX.ScaleView.Size = 10
      (Also das ist jetz per Code, aber kann man auch in den Dialogen finden)
      Ist oft sehr nützlich! :thumbsup:
      Dateien
      • ChartTester.zip

        (23,37 kB, 1.561 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „ErfinderDesRades“ ()

      Für die Klickfaulen unter uns geht auch:

      VB.NET-Quellcode

      1. Private Sub ChartDataDataGridView_CellLeave(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles ChartDataDataGridView.CellLeave
      2. ChartDataDataGridView.EndEdit()
      3. Chart1.DataBind()
      4. End Sub


      @EDR: Keine Lust, ein Tut für komplexere Scenarien zu machen, aber besser verständlich, als das von MS, so mehr nach dem Muster: Man nehme ...
      Hier noch paar Bilder von dem fabelhaften oben genannten Demo-Programm:



      Also das Prinzip ist: Von jeder Section gibts eine Gallerie, die alle Samples dieser Section galleriert.
      Und wenn man dann ein Sample wählt ist auf einem Tab das DemoChart, und auffm anderen der wesentliche Code, das so einzurichten.
      Zusätzlich muss man aber wohl wirklich auch in die Solution gehen, und die UserControls genau untersuchen, und deren Codebehind.
      Und auch mal im Einzelschritt durchsteppen, oder auch mal was kaputt machen und wieder reparieren.
      Leider hat MS sein Demo-Proggi-System umgemodelt, sodass der ursprüngliche Link zum Chart-Demo-Proggi ungültig wurde.
      Es ist nach GitHub verlagert worden, als Bestandteil einer sehr grossen Demo-Proggi-CodeBase - die man wie's aussieht nur komplett herunterladen kann.
      Also das hier gezeigte Demoproggi findet sich im Einzelnen hier wieder: MSDN-Codegallery: Winforms-ChartControl
      Herunterladen kann man aber nur ein Gesamt-Paket, wo es eines von vielen Demo-Proggis ist: msdn-code-gallery-community-s-z