Erweiterte Suchfunktion im Datagridview

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von AbsolutCF.

    Erweiterte Suchfunktion im Datagridview

    Hi an alle!

    In Form1 in meinem Program ist ein Datagridview mit mehreren Spalten.

    Eine Suchfunktion in der nur eine Spalte nach einem exakten Wert durchsuch wird und die entsprechende Zelle dann farbig dargestellt wird hab ich schon

    Die Suchfunktion befindet sich in einer neue Form!

    VB.NET-Quellcode

    1. Private a As Integer ' a steht für die Spalte in der ich suchen möchte
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Form1.DataGridView1.RowsDefaultCellStyle.BackColor = Color.White
    4. a = 1
    5. Me.Text = Form1.DataGridView1.Rows.Count - 1
    6. search_func.RunWorkerAsync()
    7. End Sub
    8. Private Sub search_func_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles search_func.DoWork
    9. Dim count As Integer = Me.Text
    10. For i = 0 To count - 1
    11. Threading.Thread.Sleep(10)
    12. search_func.ReportProgress(i)
    13. Next
    14. End Sub
    15. Private Sub search_func_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles search_func.ProgressChanged
    16. Label1.Text = e.ProgressPercentage
    17. If CStr(Form1.DataGridView1.Rows(Label1.Text).Cells(a).Value) = TextBox1.Text Then
    18. Form1.DataGridView1.Rows(Label1.Text).Cells(a).Style.BackColor = Color.Orange
    19. Else
    20. Form1.DataGridView1.Rows(Label1.Text).Cells(a).Style.BackColor = Color.White
    21. End If
    22. End Sub
    23. Private Sub search_func_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles search_func.RunWorkerCompleted
    24. a = 0
    25. label1.Text = "Suche wurde ausgeführt ..."
    26. End Sub


    Die Suche funktioniert auch ohne Probleme! Das einzige was mich stört ist das nur exakte Werte herausgesuch werden.

    Suche ich z.B. nach "32" und in der Zelle steht "32b" wird diese nicht markiert.

    Ich hab da schon nen Ansatz aber weiß nicht ganz genau wie ich den unterbringen soll oder ob er überhaupt funktioniert:

    Wenn die Suchfunktion eine Zelle sich vornimmt dann:

    VB.NET-Quellcode

    1. Dim Suchzeichen as Integer = 0 ' Char Position im Suchfeld
    2. For i = 0 to Cell.lenght
    3. if cell.char(i) = Textbox1.Char(Suchzeichen) then
    4. if Suchzeichen < Textbox1.lenght then
    5. Suchzeichen +=1
    6. else
    7. if cell.char(i) = Textbox1.char(Suchzeichen) then
    8. if suchzeichen = Textbox1.lenght then
    9. cell.style.backcolor = color.orange
    10. endif
    11. endif


    Wie gesagt ist nur nen Ansatz noch kein korrekter Code.

    Also ich möchte erreichen das er die Zelle auch dann markiert wenn der Suchtext nur ein Teil vom Zelleninhalt ist.

    Kann mir da jemand helfen? Wäre echt super :D
    Sieh mal hier nach:
    RegEx
    z.B.

    VB.NET-Quellcode

    1. Dim M As MatchCollection = Regex.Matches(_ActivePanel.Text, "(<..>|<...>)")

    findet alle 2- und 3-zeichen langen Strings, die sich in "<>"-Klammern befinden.
    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!