Datagridview durchschleifen und einzelne Zellen markieren

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von vierkant.

    Datagridview durchschleifen und einzelne Zellen markieren

    Hallo ich schleife eine Datagridview durch sollte sich in der Spalte 4 eine Zelle befinden die einen größeren Wert als 0 aufweist soll diese Zelle Rot sein.

    So hab ichs versucht:

    VB.NET-Quellcode

    1. Try
    2. For i = 1 To DataGridView1.Rows.Count - 1
    3. If DataGridView1.Item(4, i).Value > "0" Then
    4. DataGridView1.Rows(i).Cells(4).Style.BackColor = Color.Red
    5. End If
    6. Next i
    7. Catch
    8. End Try

    Leider wird die 1. Zeile dabei übersehen! warum? Erst ab der 2. Zeile werden die Zellen Rot markiert

    vierkant schrieb:

    VB.NET-Quellcode

    1. For i = 1 To DataGridView1.Rows.Count - 1

    Fang bei Null an.

    VB.NET-Quellcode

    1. For i = 0 To DataGridView1.Rows.Count - 1
    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 bins nochmal!

    Also ein Timer überwacht die Werte meiner Datagridview:

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    2. Try
    3. For i As Decimal = 0 To DataGridView1.Rows.Count - 1
    4. If DataGridView1.Rows(i).Cells(4).Value = "130" Then
    5. DataGridView1.Rows(i).Cells(4).Style.BackColor = Color.Red
    6. End If
    7. Next
    8. Catch
    9. End Try
    10. End Sub


    Aber irgendwie Funktioniert das nicht ganz:

    1. Versuche ich es so:

    VB.NET-Quellcode

    1. If DataGridView1.Rows(i).Cells(4).Value > "130" Then ............


    wird kein Wert Rot markiert obwohl sich folgende Werte in der Spalte befinden: 90, 130, 200

    2. mach ich es so:

    VB.NET-Quellcode

    1. If DataGridView1.Rows(i).Cells(4).Value < "130" Then ...........


    werden alle Werte Rot markiert obwohl sich folgende Werte in der Spalte befinden: 90, 130, 200

    3. mach ich es so:

    VB.NET-Quellcode

    1. If DataGridView1.Rows(i).Cells(4).Value = "130" Then


    werden nur Werte rot markiert die den Zellenwert 130 aufweisen

    Was um Himmels Willen läufz den da schief? Solche sachen bringen mich an den Rand des Wahnsinns
    Hei,

    genau wie bei deinem anderen Thread.
    Mach bitte Option Strict On.

    Der Value aus einer DGV ist ein Objekt. Wandel ihn mit To.String.
    Besser du wandelst ihn in Integer und auch deine "130"
    Dann kannst du Integer mit Integer vergleichen.

    Sonst wird das sowas wie Lotto spielen.

    Bernd

    VB.NET-Quellcode

    1. If DataGridView1.Rows(i).Cells(4).Value.ToString

    Die Zahl mit Integer.Parse() wandeln oder gleich ohne Anführungszeichen.
    Also einfach nur 130. Dann ist es eine Integer.
    Oder

    VB.NET-Quellcode

    1. Dim HundertDreizig As Integer = 130
    2. If Integer.Parse(DataGridView1.Rows(i).Cells(4).Value) = HundertDreizig


    Edit:
    hatte mich vertippt. Sorry
    Ich würde mal so denken:

    VB.NET-Quellcode

    1. If DataGridView1.Rows(i).Cells(4).Value.ToString = "130" Then
    2. DataGridView1.Rows(i).Cells(4).Style.BackColor = Color.Red


    MFG Andi2572

    Edit:

    2. Hehe..

    Edit2:

    Sorry.. Hab natürlich nur das .ToString berücksichtigt!
    Natürlich musst du es so schreiben:

    VB.NET-Quellcode

    1. Dim Zahl As Integer = 130
    2. If (DataGridView1.Rows(i).Cells(4).Value) = Zahl Then
    3. DataGridView1.Rows(i).Cells(4).Style.BackColor = Color.Red

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

    so hab ich das jetzt gemacht:

    VB.NET-Quellcode

    1. Try
    2. For i As Integer = 0 To DataGridView1.Rows.Count - 1
    3. Dim Zahl As Integer = DataGridView2.CurrentRow.Cells(4).Value
    4. If Integer.Parse(DataGridView1.Rows(i).Cells(4).Value) > Zahl Then
    5. DataGridView1.Rows(i).Cells(4).Style.BackColor = Color.Red
    6. End If
    7. Next
    8. Catch
    9. End Try


    Es ist schon besser - trotzdem werden noch Werte übersehen!?
    Ich hab das mal so gelöst:

    VB.NET-Quellcode

    1. For i = 0 To dgv.Rows.Count - 1
    2. If dgv.Rows(i).Cells(3).Value.ToString = ("5") Then
    3. With dgv
    4. .Item(0, i).Style.BackColor = Color.Red
    5. .Item(1, i).Style.BackColor = Color.Red
    6. .Item(2, i).Style.BackColor = Color.Red
    7. .Item(3, i).Style.BackColor = Color.Red
    8. .Item(4, i).Style.BackColor = Color.Red
    9. End With
    10. End If
    11. Next


    Da hat es fehlerfrei funktioniert. Du kannst es ja auch mal so probieren!

    MFG Andi2572