BindingSource.Filter

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    BindingSource.Filter

    Moin Leute!

    Ich habe 24 Button Controls bennant mit (btn_A .. - btn_Z)
    Desweiteren habe ich ein DGV welches per BindingSource an ein Dataset gebunden ist.

    Nun möchte ich die BindingSource filtern, das mache ich wie folgt:

    VB.NET-Quellcode

    1. Private Sub btn_A_Click(sender As Object, e As EventArgs) Handles btn_A.Click
    2. MoviesBindingSource.RemoveFilter()
    3. MoviesBindingSource.Filter = "Title LIKE '" & "A" & "%'"
    4. End Sub


    Das Funktioniert auch so wie es soll, aber wie baue ich mir am besten ein Konstrukt auf für alle 24 Controls um nach dem Anfangsbuchstaben zu filtern?
    Klar könnte ich 24 Subs für jeden Button schreiben, aber
    A: lernt man dabei nix, und
    B: kann das sich der richtige weg sein.

    Für Tipps wäre ich sehr dankbar!
    Danke für den Hinweis!

    Aber das ist dann doch "Mit Kanonen auf Spatzen schießen"


    Mit dem simplen zweizeiler erreiche ich ja den gewünschten Effekt.
    Ich hätte nur gerne einen Schupps in die richtige Richtung, damit ich mir nicht umständlich 24 Subs erstelle.

    VB.NET-Quellcode

    1. Private _Buttons As List(Of Button)
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. _Buttons = New List(Of Button) From {Button1, Button2, Button3, Button3, Button5}
    4. _Buttons.ForEach(Sub(bt) AddHandler bt.Click, AddressOf Button_Click)
    5. End Sub
    6. Private Sub Button_Click(sender As Object, e As EventArgs)
    7. Dim bt = DirectCast(sender, Button)
    8. Dim i = _Buttons.IndexOf(bt)
    9. Dim c = Convert.ToChar(i + 65)
    10. MoviesBindingSource.Filter = "Title LIKE '" & c & "%'"
    11. End Sub
    @ErfinderDesRades
    Vielen Dank für das Snippet!
    Ich habe es so umgeschrieben das es bei mir passt, trotzdem hätte ich ein paar Verständnissfragen.

    Dim c = Convert.ToChar(i + 65)
    Hier wird ja der Buttonindex in einen Char konvertiert, aber was hat das 65 dort zu suchen?
    Wenn ich mir das ganze per Debug.write ausgeben lasse kommt für btn_A folgendes heraus.
    Value for i: 0
    Value for c: A

    könntest du mir das evtl noch erklären?
    Convert.ToChar bezieht sich auf die Ascii-Tabelle, und da fangen die Großbuchstaben an Index 65 an.
    torsten-horn.de/techdocs/ascii.htm
    de.wikipedia.org/wiki/American…r_Information_Interchange

    Ohne Kenntnis dieser Konstante könnte man glaub auch so coden:

    VB.NET-Quellcode

    1. Private Sub Button_Click(sender As Object, e As EventArgs)
    2. Dim bt = DirectCast(sender, Button)
    3. Dim i = _Buttons.IndexOf(bt)
    4. dim offs = Convert.ToInteger("A"c)
    5. Dim c = Convert.ToChar(i + offs)
    6. MoviesBindingSource.Filter = "Title LIKE '" & c & "%'"
    7. End Sub

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