DGV höchster Wert farbig markieren

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von MR_NMS.

    MR_NMS schrieb:

    Es sollen aber auch bei den anderen Monaten markiert werden!
    Das Problem an dieser Anforderung: Da bisher überhaupt noch kein Monat markiert wurde, sondern nur eine Gesamtjahreszahl, weiß ich immer noch nicht, was Du mit anderen Monaten meinst. Oder was da dann markiert werden soll. Ich kenne Deine Vorstellungen nicht. Hilf uns, indem Du genau beschreibst, was wann geschehen soll.

    VaporiZed schrieb:

    Zeig mal im Bild, was jetzt wo unter welchen Umständen zusätzlich markiert werden soll.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke. Der Hinweis, dass es deutlich leichter geht, ohne das ganze DGV durchzuackern, ist (auch) mir entglitten.

    ##########

    Öhm. Moment mal. das DGV muss doch trotzdem durchgeackert werden, um den höchsten/niedrigsten Wert zu finden, bevor man weiß, welche Zelle markieren werden muss. Ok, man kann es auch über die Datenquelle rausfinden. Aber da die Daten in der Tabelle ja nicht 1:1 im DGV repräsentiert wird (es werden ja "nur" die Vorfälle und ihre Datumsangaben gespeichert), wäre der Aufwand m.E. erheblich höher.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @VaporiZed nein muss es nicht. Der Post von @VB1963 implizierte das was ich hier auch am Sinnvollsten finde:

    Ich zitiere mal @VB1963 seinen Post:
    ​Dann schaue dir einmal das DGV-Cell-Painting-Event an - da kannst du DGV-Zellen färben...
    Und zwar in Abhängigkeit eines Maximalwertes, den du zuvor aus deiner Daten-Column errechnen musst...
    Bitte berechne das jetzt nicht über das DGV über sämtliche Zellen, sondern verwende deine zu grunde liegende Tabelle, an das du dein DGV gebunden hast!


    Das DGV ist ja nur zum anzeigen da. Also sollte VORHER mit den Daten aus der DatenTable berechnet werden was der höchste ist und dann kann man sich die id merken
    und im CellPainting Event dieser dann die Farbe geben. Ohne im CellPainting Rechnen zu müssen. Würde hier eine Menge Code sparen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    VaporiZed schrieb:

    MR_NMS schrieb:

    Es sollen aber auch bei den anderen Monaten markiert werden!
    Das Problem an dieser Anforderung: Da bisher überhaupt noch kein Monat markiert wurde, sondern nur eine Gesamtjahreszahl, weiß ich immer noch nicht, was Du mit anderen Monaten meinst. Oder was da dann markiert werden soll. Ich kenne Deine Vorstellungen nicht. Hilf uns, indem Du genau beschreibst, was wann geschehen soll.

    VaporiZed schrieb:

    Zeig mal im Bild, was jetzt wo unter welchen Umständen zusätzlich markiert werden soll.


    Ich habe das DGV zum Anzeigen von gesammelten Daten! Erst das Jahr, dann die Summe des Jahres und dann noch die einzelnen Monate des Jahres! Nun sollen wie auch schon bei der Jahressumme für die einzelnen Monate der niedrigste und der höchste Wert markiert werden!
    Wie im Bild zu sehen!!
    Bilder
    • anzeige1.jpg

      1,93 MB, 3.458×1.203, 24 mal angesehen

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

    xChRoNiKx schrieb:

    dann kann man sich die id merken
    Was denn für ne ID? Du weißt schon, was für Daten in welcher Form in der DataTable drin sind? Mach mal bitte nen kurzen Codevorschlag diesbezüglich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich glaub ich hab ein déjà-vu

    VaporiZed schrieb:

    Können im Sinne von dürfen: ja klar, Du kannst so viele Schleifen machen wie Du willst. Können im Sinne von wissen, wie es geht: tja, sag Du es uns.

    Und bzgl. Deines zuletzt geposteten Bildes: da sind ganz viele Farbpunkte. Was haben die zu bedeuten?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    :S Ok, hab die Zeilen gelesen und nicht die Spalten. Ich dachte, dass Du die besten und schlechtesten Monate pro Jahr erfassen willst und nicht die besten und schlechtesten Monate seit Datenerfassung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Was denn für ne ID?

    Jo mein Fehler.
    Wenn das alles in nem richtigem DataSet liegt könnte man da so zumindest (achtung C# Code):
    Spoiler anzeigen

    C#-Quellcode

    1. DataSet1.exampleTableRow row = (DataSet1.exampleTableRow)dataSet1.exampleTable.Select("", "januar DESC").ElementAt(0);
    2. MessageBox.Show(row.januar.ToString() + " / " + row.Jahr.ToString());

    rausbekommen in welchem Jahr der januar z.b. MAX value hat.
    das kann er dann in seiner schleife zur befüllung schon berücksichtigen und das dementsprechend dort schon eintragen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Was mich an dem CellFormatting-Vorschlag (momentan noch) stört, ist die Tatsache, dass man das hiesige Vorhaben nicht ohne Redundanz nur innerhalb einer Methode lösen kann. Da das Event für jede Zelle aufgerufen wird, muss man entweder jedes mal wieder die gesamte DataTable auswerten und dann die passenden Zellen markieren. Oder diese Zellen vorab berechnen/ermitteln, dann alles in formweite Variable speichern und diese dann im CellFormatting-EventHandler hernehmen. Und für solch eine einzige Sache klassenweite Variablen herzunehmen, sehe ich persönlich als inakzeptabel.
    Die all-in-one-Variante ist mir persönlich lieber.

    @MR_NMS: Mach einfach um den Code aus Post#20 noch ne weitere Schleife, die alle Spalten von Summe bis Dezember durchgeht. Die Zeilen #8, #19 und #20 müssen dann nur noch angepasst werden, weil da ja noch der Absolutbezug zur Summen-Spalte steht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Jo seh ich auch so. Da wünsche ich mir auch ein wenig mehr Komfort um im dgv die Dinge
    besser zu formatieren.

    wenn es um einzelne Dinge geht die sich auf die celle beziehen also z. b. wenn großer als xy mach Hintergrund gelb dann ist das echt gut so.

    nur halt bei solchen Vorhaben.find ich das etwas frickelig je nachdem wie das dataset aussieht.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Hallo Zusammen!

    Ich habe jetzt nochmal eine Äußere Schleife erstellt, aber leider nicht das gewünschte Ergebnis.
    Es werden nicht die Einzelnen Spalten mit der größten Zahl und kleinesten Zahl markiert, sondern die ganze Zeile!
    Ich denke mal, das noch etwas bei der Schleiße fehlt??
    Aber was??

    VB.NET-Quellcode

    1. For j = 1 To 12
    2. For i As Integer = 0 To DataGridView1.Rows.Count - 1
    3. Value = CInt(DataGridView1.Rows(i).Cells(j).Value)
    4. If HoechsteZahl < Value Then
    5. HoechsteZahl = Value
    6. ZeilenindexMitHoechstemWert = i
    7. ElseIf KleinsteZahl > Value Then
    8. KleinsteZahl = Value
    9. ZeilenindexMitKleinstemWert = i
    10. End If
    11. Next
    12. DataGridView1.Rows(ZeilenindexMitHoechstemWert).Cells(j).Style.BackColor = Color.LightGreen
    13. DataGridView1.Rows(ZeilenindexMitKleinstemWert).Cells(j).Style.BackColor = Color.LightBlue
    14. Next
    Bilder
    • Ansicht.JPG

      464,72 kB, 3.053×1.189, 17 mal angesehen
    Leider hast Du meinen Rat nicht befolgt. Du musst den kompletten Code mit der For-Schleife umschließen. Du hast vergessen, die Deklarationen von HoechsteZahl usw. mit in die Schleife reinzupacken. Alternativ musst Du bei Deinem aktuellen Code nach Zeile#1 die Variablen zurücksetzen: HoechsteZahl = 0 , KleinsteZahl = Integer.MaxValue, ZeilenindexMitHoechstemWert = -1 und ZeilenindexMitKleinstemWert = -1.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    OK!
    Dann versuche ich es nochmal mit deinem Rat aus Post 32!
    Habe die Schleife jetzt wie geraten über alles laufen lassen und es geht!

    VB.NET-Quellcode

    1. For j = 1 To 13
    2. Dim HoechsteZahl = 0
    3. Dim KleinsteZahl = 99999
    4. Dim ZeilenindexMitHoechstemWert = -1
    5. Dim ZeilenindexMitKleinstemWert = -1
    6. Dim Value As Integer
    7. For i As Integer = 0 To DataGridView1.Rows.Count - 1
    8. Value = CInt(DataGridView1.Rows(i).Cells(j).Value)
    9. If HoechsteZahl < Value Then
    10. HoechsteZahl = Value
    11. ZeilenindexMitHoechstemWert = i
    12. ElseIf KleinsteZahl > Value Then
    13. KleinsteZahl = Value
    14. ZeilenindexMitKleinstemWert = i
    15. End If
    16. Next
    17. DataGridView1.Rows(ZeilenindexMitHoechstemWert).Cells(j).Style.BackColor = Color.LightGreen
    18. DataGridView1.Rows(ZeilenindexMitKleinstemWert).Cells(j).Style.BackColor = Color.LightBlue
    19. Next

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