DGV zellen durchschleifen und dann färben

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von virus.

    DGV zellen durchschleifen und dann färben

    Hallo ich mal wieder :p

    Ich habe ein Problem beim einfärben meiner Zellen im DGV... jetzt werden alle Zellen in Rot gefärbt


    sehr es euch mal selbst an, ich habe nur einen denkfehler ..."denke" ich :D

    VB.NET-Quellcode

    1. Dim arrText As New ArrayList()
    2. For i As Integer = arrText.Count - 1 To 0 Step -1
    3. For dgv = 0 To DataGridView1.Rows.Count - 2
    4. If arrText(i).ToString.Contains(DataGridView1.Rows(dgv).Cells(0).Value) Then
    5. arrText.RemoveAt(i)
    6. ' ListBox1.Items.Remove(item)
    7. DataGridView1.Rows(dgv).Cells(0).Style.BackColor = Color.Green
    8. Else
    9. DataGridView1.Rows(dgv).Cells(0).Style.BackColor = Color.Red
    10. End If
    11. Next
    12. Next



    Vielen dank schonmal

    Marvin
    Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)
    @virus Setze einen Haltepunkt auf das If und überzeuge Dich davon, dass die Bedingung korrekt formuliert wurde.
    ------
    Welchen Inhalt hat die ArrayList? Nimm da lieber eine typisierte List(Of T)
    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!
    Ich denke mal, Du solltest die Zeile

    virus schrieb:

    VB.NET-Quellcode

    1. arrText.RemoveAt(i)
    ersatzlos streichen.
    Wenn Du das Element 0 löschst, ist das bisherige Element 1 nun das Element 0 und der nächste Vergleich wird mit dem ursprünglichen Element 2 durchgeführt.
    D.h., Du kommst mit der ArrayList-Numerierung gehörig durcheinander.
    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!

    ErfinderDesRades schrieb:


    Was aber soll er eigentlich tun?


    ehm er soll nur die Einträge grün färben die auch auf der arraylist vorhanden sind. Und die die nicht übereinstimmen rot


    RodFromGermany schrieb:

    Ich denke mal, Du solltest die Zeile
    ersatzlos streichen.
    Wenn Du das Element 0 löschst, ist das bisherige Element 1 nun das Element 0 und der nächste Vergleich wird mit dem ursprünglichen Element 2 durchgeführt.
    D.h., Du kommst mit der ArrayList-Numerierung gehörig durcheinander.


    Diesen Fehler umgehe ich doch indem ich die arraylist rückwärts .. Also von hinten nach vorne durchschleife :|


    Mich werde mir das am Freitag nochmal angucken wenn ich auf der Arbeit bin :)
    Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)

    virus schrieb:

    ehm er soll nur die Einträge grün färben die auch auf der arraylist vorhanden sind. Und die die nicht übereinstimmen rot
    ah - dann ist das Problem ja klar identifizierbar:
    Es gibt keine einzige Dgv-Zelle, wo die Bedingung
    arrText(i).ToString.Contains(DataGridView1.Rows(dgv).Cells(0).Value) erfüllt wäre.

    virus schrieb:

    Also von hinten nach vorne durchschleife
    Jou, korrekt.
    Du hast ja 2 Schleifen.
    Entweder Dein DGV ist falsch befüllt
    oder
    Du greifst auf die falsche Spalte zu
    oder
    Deine If-Bedingung ist falsch formuliert.
    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!
    Sorry das ich mich so spät erst melde..
    ich habe es jetzt wie folgt gelöst...

    VB.NET-Quellcode

    1. For i As Integer = arrText.Count - 1 To 0 Step -1
    2. If arrText(i).ToString.Contains(Convert.ToString(DataGridView1.Rows(dgv).Cells(0).Value)) Then
    3. arrText.RemoveAt(i)
    4. DataGridView1.Rows(dgv).Cells(0).Style.BackColor = Color.Green
    5. Exit For
    6. Else
    7. DataGridView1.Rows(dgv).Cells(0).Style.BackColor = Color.Red
    8. End If
    9. Next
    10. Next


    das Klappt nun auch soweit ganz gut :D


    Marvin
    Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)
    bischen holperig, und ein überflüssiges .ToString(), und ein umständliches .ToString().

    Bist du an Code-Verbesserung interessiert?
    Dann musst du dir aber auch Gedanken über Datentypen machen, zB einen String braucht man nicht mit .ToString() in einen String umwandeln (denn es ist ja schon ein String)... solche Sachen...
    demnach hast du evtl. deinen Code verändert. Aber vmtl. ist er noch weiter verbesserungsfähig, aber ich kann ihn nicht sehen!

    ich sehe nachwievor den alten Code, den, wo es eine Variable dgv gibt, wo man nicht weiß wo die herkommt.

    Also wenn man die ganze Methode sehen könnte, da könnte man u.U. gradezu verblüffende Vereinfachungen vorschlagen.
    Das wäre alles vom Code :p
    Das "dgv" ist auch nur von einer for Schleife

    Visual Basic-Quellcode

    1. For dgv = 0 To DataGridView1.Rows.Count - 2
    2. For i As Integer = arrText.Count - 1 To 0 Step -1
    3. If arrText(i).ToString.Contains(Convert.ToString(DataGridView1.Rows(dgv).Cells(0).Value)) Then
    4. arrText.RemoveAt(i)
    5. DataGridView1.Rows(dgv).Cells(0).Style.BackColor = Color.Green
    6. Exit For
    7. Else
    8. DataGridView1.Rows(dgv).Cells(0).Style.BackColor = Color.Red
    9. End If
    10. Next
    11. Next


    Liebe Grüße
    Marvin
    Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)
    jetzt bin ich etwas verdattert.
    Dein
    wo du recht hast hast du recht... Ehrlich gesagt weiß ich auch nicht wieso ich das gemacht habe :s
    hatte ich so verstanden, dass du meine Bemerkungen zumindest teilweise verstanden und in Änderungen umgesetzt hättest.
    Aber hast du ja garnet - ist ja noch derselbe komische Code wie zuvor - nur bislang fehlende Kopfzeile zeigst du nun auch noch.

    Also nur mir beipflichten, aber keine codetechnischen Konsequenzen ziehen ist iwie nicht,was ich mir unter "über Datentypen nachdenken" vorstelle, insbesondere über den Sinn von String.ToString() - "Umwandlungen."
    Den Nonsense hätteste wenigstens entfernen / korrigieren können, dass ich sehe, es wird auch verstanden was ichsage, nicht nur auf Codesnippets zum Einpasten gewartet.
    Sorry ich war nichtmehr am PC habs am Handy gemacht und mich hats tierisch angenervt das es nicht so geklappt hat wie es sollte :thumbdown: desshalb hatte ich nur den Code von oben kopiert und auch nix mehr verändert großartig.


    Wenn ich allerdings

    Visual Basic-Quellcode

    1. Option Strict On
    drin habe dann wirft er mir ne exception bei

    VB.NET-Quellcode

    1. arrText(i).contains
    "Option Strict On" lässt spätes Binden nicht zu.



    Das gleiche hier

    VB.NET-Quellcode

    1. DataGridView1.Rows(dgv).Cells(0).Value


    da kommt dann folgendes...

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    "Option Strict On" lässt keine impliziten Konvertierungen von "Object" in "String" zu.
    Erweiterungsmethode "Public Function Contains(value As Char) As Boolean" in "Enumerable" definiert: "Option Strict On" lässt keine impliziten Konvertierungen von "Object" in "Char" zu.

    Desshalb hab ich das Object auch in nem String Konvertiert.



    Sag mir wenn ich irgendwo falsch liege ?(


    Liebe Grüße

    Marvin
    Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)

    virus schrieb:

    impliziten Konvertierungen von "Object" in "String"
    umgehst Du mit .ToString().
    Du solltest Dich einfach mal mit den Datentypen befassen, die Du verwendest.
    Welchen Typ hat arrText?
    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!

    VB.NET-Quellcode

    1. Dim arrText As New ArrayList()


    Ja ich muss mir mal noch ein paar Dinge wohl durchlesen .. :/

    Aber ich bin ja auch aufnahme fähig.. dazu bin ich schließlich auch hier :)


    Liebe Grüße
    Marvin
    Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)

    virus schrieb:

    ArrayList
    ist untypisiert, da kannst Du Roulade mit Klößen, Strings, Integer und was sonst noch reinpacken.
    Diese Klasse solltest Du durch List(Of T) ersetzen, da passt bereits der Compiler auf, womit sie befüllt wird. Die ist typsicher.
    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!