Datagridview Werte suchen und markieren

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ChaosBernd.

    Datagridview Werte suchen und markieren

    Hallo Leute, ich bin Anfänger

    ich habe folgendes Problem ich möchte ein Suchfeld für ein Datagridview erstellen. Das ich in jeder Spalte/Zelle danach suchen kann. Der dazu folgende Code den ich mir zusammen gebastelt habe funktioniert nicht richtig d.h. nur für ein oder zwei Zellen. Und auch nur dann wenn ich in der einzelnen Reihe nur ein Wert stehen habe. Ich habe hier eine Funktion gefunden, die vielleicht hätte passen können aber die geht gar nicht. Ich hoffe auch, wenn ich das Thema noch mal aufgreife mir hier jemand helfen kann?

    Private Sub tolTxtSuche_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tolTxtSuche.TextChanged
    Dim i As Integer
    Dim eingabe As String
    eingabe = tolTxtSuche.Text

    Try
    For i = 0 To dgv.Rows.Count - 1
    If dgv.Rows(i).Cells(i).Value.ToString = eingabe Then
    dgv.Rows(i).Cells(i).Style.BackColor = Color.Green
    Else
    dgv.Rows(i).Cells(i).Style.BackColor = Color.White
    End If
    Next
    Catch ex As System.NullReferenceException
    Exit Sub
    End Try

    End Sub

    Geuss Panikrock
    geht doch mit der BackColor.

    Ist zwar ein anderes Besipiel von dieser Tage, geht aber

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Form1
    4. ' Prüfen ob eine CheckBox den Wert Check o. Unchecked hat
    5. ' Hier befindet sich in der ersten Spalte die ComboBox
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. ' Anzahl der Zeilen in der DataGridView
    8. Dim Menge As Integer = DataGridView1.Rows.Count - 1
    9. ' Genau so oft die Schleife wiederholen wie die Anzahl der Zeilen (Rows)
    10. For i = 0 To Menge
    11. ' jetzt deine Abfrage
    12. If CBool(DataGridView1.Rows(i).Cells(0).Value) = True Then
    13. 'MessageBox.Show("CheckBox in Row " & i.ToString & " ist checked !")
    14. DataGridView1.Rows(i).Cells(1).Style.BackColor = Color.Green
    15. Else
    16. DataGridView1.Rows(i).Cells(1).Style.BackColor = Color.Red
    17. End If
    18. Next
    19. End Sub
    20. End Class
    Danke ChaosBernd

    Ich habe den Code mal ausprobiert und für meine DGV angepasst aber der Funktioniert noch weniger. Wie gesagt, wenn ich z.B. in Reihe 0, Zelle 0 und 1 einen Wert Stehen habe wird nur der erste Wert Grün und der zweite Wert schon nicht mehr. Ein andere Fehlermeldung (ArgumentOutOfRangeException) bekomme ich wenn ich über 6 Reihen habe. Muss wohl noch verdammt viel lesen :)

    Pankrock schrieb:

    wird nur der erste Wert Grün


    Weil wir ja nur Cell(0) angesprochen haben.
    Wenn die ganze Row Farblich markiert werden soll, musst du eine Schleife drüber laufen lassen.

    VB.NET-Quellcode

    1. Dim ColumCount As Integer = DataGridView1.ColumnCount - 1
    2. For g = 0 To ColumCount
    3. DataGridView1.Rows(i).Cells(g).Style.BackColor = Color.Red
    4. Next

    Ich finde leider auch nicht wo man die Rows direkt Farblich ansprechen kann.

    Pankrock schrieb:

    Ein andere Fehlermeldung (ArgumentOutOfRangeException)


    Dann befindest du dich in einem Bereich die es nicht mehr gibt.
    Du solltest vor jeder aktion (löschen, anfügen ...) die DGV neu zählen.
    Zeig mal deinen Versuch (Code).
    So kann ich leider nicht sehen warum eine OutOfRange Exception ausgelöst wird.

    Danke dir
    Ich habe es geschaft mit der äußeren Schleife For i = 0 To dgv.Rows.Count -1 und inneren Schleife For g = 0 To dgv.Columns.Count -1. Wenn ich jetzt noch rausbekomme wie man das hier richtig reinschreibt mit Zeilen 1,2, usw. dann würd ich das den Code von mir mal reinsetzen.
    Hallo Chaos Bernd,

    Ich habe den Code jetzt so wie ich Ihn haben will, dass der Benutzer Zahlen und Wörter im Suchfeld suchen lassen kann und das in jeder Zelle. Ich wollte den kompletten Code mal hier reinschreiben, ich weiss aber nicht wie man hier die Nummerierung (Zeilennummer) hinbekommt?

    Nochmal danke für deine Hilfe
    Pankrock
    genau so wie die Schleife ist,
    nur halt nicht die Farbe ändern sondern fragen was du da möchtest.

    VB.NET-Quellcode

    1. Dim ColumCount As Integer = DataGridView1.ColumnCount - 1
    2. For g = 0 To ColumCount
    3. If ...... Contains(TextBox_Suche Then) Hier abfragen
    4. DataGridView1.Rows(i).Cells(g).Style.BackColor = Color.Red
    5. End IF
    6. Next

    Du bist ja schon in der Zeile und in der Spalte. Also gehst du ja jede Zelle durch.
    Dann gehst du auf Beantworten
    Drückst dann den Button VB
    zwischen den Klammern Kopierst du den Code rein.
    das wars

    dann den Thread noch als erledigt markieren, und wenn du magst noch auf Bedanken drücken.

    freut mich das ich dir Helfen konnte

    VB.NET-Quellcode

    1. Dim eingabe As String
    2. Dim i, g As Integer
    3. eingabe = tolTxtSuche.Text
    4. Try
    5. 'Durchläuft die Reihen bis zum Ende
    6. For i = 0 To dgv.Rows.Count - 1
    7. 'Durchläuft die Spalten bis zum Ende
    8. For g = 0 To dgv.Columns.Count - 1
    9. 'Ist Zelle gleich der Eingabe, dann Farbe Türkis
    10. If dgv.Rows(i).Cells(g).Value = eingabe Then
    11. dgv.Rows(i).Cells(g).Style.BackColor = Color.Turquoise
    12. Else
    13. 'Suche entspricht nicht der eingabe, dann Zellen wieder weiss
    14. dgv.Rows(i).Cells(g).Style.BackColor = Color.White
    15. End If
    16. Next g
    17. Next i
    18. Catch ex As System.NullReferenceException
    19. MessageBox.Show(ex.Message")
    20. End Try