Frage zu Datatable, Datagridview und Chart

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Frage zu Datatable, Datagridview und Chart

    Hallo,

    eine Frage habe ich noch.

    Habe ja ein typ. Dataset, Datatable und ein Datagridview das an der Datatable hängt...

    Mein Chart hängt auch an der Datatable. Soweit ok.


    Nun hätte ich gerne folgendes, nur leider weis ich nicht wie sich das nennt bzw. wo nach ich suchen soll.


    Wenn ich im DGV eine Zeile markiere, soll im Chart genau dieser Datenpunkt auch markiert werden (z. B. ein Pfeil oder ein kreis drum machen). Wie markiert wird ist egal :)


    Wie nennt sich so was ?
    hallo michl75,

    ich hab zwar keine ahnung wie sich das genau nennt, wonach du sucht, ich würde es "positionsmarker" oder so nennen aber, im chart geht das mit datapoint-annotations.
    die annotation ist ja generell ne anmerkung für igrendwas im chart und kann auch an datenpunkte geknüpft werden.
    müsstest also für das dgv ne prozedur schreiben, die ausgelöst wird, sobal ne zeile im dgv markiert ist und in dieser prozedur kannst du dann die annotion fürs chart konstruieren und an den gewünschten datenpukt anhängen. achte dabei auf schriftformatierung etc. sonst ragt die annotation über das chart hinaus und wird nicht komplett angezeigt.

    michl75 schrieb:

    soll im Chart genau dieser Datenpunkt auch markiert werden
    Leg dafür eine Series im Chart an und gib ihr die entsprechenden Properties (ChartType=Point, Color, ...).
    Mit dem Click auf das DGV gibst Du einfach dieser Series die Koordinaten rein, ein Punkt (x, y) sollte dann reichen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    rod meint, dass du für jede zeile in deinem dgv ne eigene series-auflistung im chart setzten sollst, oder nur eine series, deren x-y-daten erst gesetzt werden, wenn die zeile im dgv markiert wird.
    ob das praktikabel ist hängt davon ab wie viele zeilen in deinem dgv sind.
    poste doch mal ein bild von deinem dgv, dass man sich mal vorstellen kann, was da für daten drinne stehen. evtl. geht mit ner item-zuweisen noch einfacher.
    sag doch gleich das du ein glaser-diagramm bastelst ;)

    ich hab auch so ein ding programmiert. das wesentliche des glaser-diagramms ist doch der dampfdruckverlauf als ggraph durch die bauteilschichten. die einzelnen zwischenwerte sind doch eigentlich relativ uninteresannt, dafür haste ja die tabelle. entscheident sind die schichtgrenzen. die verläufe durch die einzelnen schichten sind ohnehin linear.
    du solltest vielleicht auf der x-achse die äqhivaltene dampfdiffusionsschichtstärke sd abtgragen und einfach nur die schichtgrenzen als funktion x=... einmalen, dann bleibt das ding übersichtlich.

    affrop schrieb:

    sag doch gleich das du ein glaser-diagramm bastelst ;)


    ... die Glaser Berechnungen stehen bereits alle, die Ausgabe... ja da bin ich noch am überlgen wie ich die am besten ausgebe.

    Dennoch hätte ich gerne diese Markierung in dem Chart.



    Nur so Interesse halber: Hast du mal n Bildschirmausdruck von deinem Programm?
    Würde mich interessieren wie deins aussieht :)


    Edit:

    Habe gerade mal so versucht... da passiert aber nix :(

    VB.NET-Quellcode

    1. Private Sub DataGridView2_MouseClick(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) _
    2. Handles DataGridView2.MouseClick
    3. Dim _nri As Integer = DataGridView2.Item(0, DataGridView2.CurrentRow.Index).Value
    4. 'Chart6.Annotations(0).AnchorDataPoint = Chart6.Series(0).Points(_nri)
    5. Dim calloutAnnotation = New DataVisualization.Charting.CalloutAnnotation()
    6. calloutAnnotation.Text = DataGridView2.Item(1, DataGridView2.CurrentRow.Index).Value
    7. calloutAnnotation.BackColor = Color.LightYellow
    8. calloutAnnotation.CalloutStyle = CalloutStyle.RoundedRectangle
    9. calloutAnnotation.AnchorOffsetY = 5
    10. calloutAnnotation.AnchorAlignment = ContentAlignment.BottomCenter
    11. Dim dataPoints = Chart6.Series(0).Points(_nri)
    12. Chart6.Annotations.Add(calloutAnnotation)
    13. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „michl75“ ()

    ich habe die berechnungen auf eine separate form ausgelagert in ein dgv. auf dieses dgv greift das chart zu. hat den vorteil, dass du die achsen zommen kannst diagramme neu zeichnen etc.
    hier mal mein programmablauf:
    zuerst die abfrage des bauteilaufbaus und der umgebungsbedingungen


    dann die berechnungsergebnisse für tau-und verdunstungsperiode



    und dann bei bedarf das diagramm



    und nimm als eventhandler nicht mouseclick sonder RowStateChanged. das tritt ein wenn die zeile fokus erhält oder verliert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „affrop“ ()

    schaut gut aus... :))

    muss daran noch ordentlich basteln.


    naja... mal gucken wie es mal aussehen wird.



    ...aber zum Problem zurück > so mein Test gerade mal :

    VB.NET-Quellcode

    1. Dim _nri As Integer = DataGridView2.Item(0, DataGridView2.CurrentRow.Index).Value
    2. Dim rectangleAnnotation = New RectangleAnnotation()
    3. rectangleAnnotation.Text = "TEST"
    4. rectangleAnnotation.ClipToChartArea = Chart6.ChartAreas(0).Name
    5. rectangleAnnotation.AnchorX = 30
    6. rectangleAnnotation.AnchorY = 70
    7. Chart6.Annotations.Add(rectangleAnnotation)


    So hat es nun geklappt und es wurde ein fenster eingeblendet.

    Nur wie kann ich nun die X Y Koordinaten festlegen?
    Habe ja nur Bauteilnr. 1.2.3..., Bezeichnung und einen Wert in der Tabelle bzw. DGV.
    die annotation hängst du an den datenpunkt mit der anchor-eigenschaft:

    VB.NET-Quellcode

    1. Chart1.Annotations("Anno").AnchorDataPoint = Chart1.Series("Serie1").Points(1)


    die points-auflistung der series ist 0-basierend indiziert.
    könntest aber ein problem bekommen, weil deine x-achse nicht skalar ist. die zuordnung ist ja wie im karthesischen koordinatensystem mit wertepaar (x;y) as double.
    deine x-werte scheinen aber strings zu sein. daher mein tipp mit den striplines als darstellung er schichtgrenzen, so dass das chart einfach ein koordinatensystem ist.
    die druckkurve ist ja schließlich auch f:-> p(sd) und nicht p(Bauteilbezeichnung).

    wenn du es so wie ich aufbaust kannst du auch gleich prüfen ob dein bauteil diffusionstechnisch in ordnung ist. wenn mehr verdunstet als austaut ist es ok. sonst brauchst du noch ne dampfbremse.
    du kannst auch die koordinaten unten anzeigen lassen, die skalierung ändern etc. die schichtgrenzen habe ich übrigens mit striplines hergestellt (die roten striche)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „affrop“ ()

    michl75 schrieb:

    Kannst mir das bisserl näher erklären?
    Du brauchst genau eine weitere Kurve in Deinem Diagramm, die bekommt dann dynamisch die Koordinaten aus dem DGV.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!