spezieller Filter in der Bindinsource

  • VB.NET
  • .NET (FX) 3.0–3.5

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

    spezieller Filter in der Bindinsource

    Guten Tag,
    Ich bin neu hier im Forum, hab mich grad angemeldet um ein Problem kundzutun.
    Ich programmiere nur so zu Spass. aber auch da tauchen Probleme auf. z.b.
    Ich habe ein Programm "Adressenverwaltung", an sich nichts neues und es gibt auch schon genügend Software die man nutzen kann.
    Ich möchte es aber selber machen. Also. Das Proramm hat eine Access_DB
    Auslesen, Anzeigen Im DGV, Detailview, speichern neuen Datensatz, anlegen,abbrechen oder Datensatz editieren klappt alles.
    Wenn ich nun einen neuen Datensatz erstellen möchte, Drücke ich den Button "anlegen". und alle Eingabetextboxen werden geleert.(bereit für Eingabe)
    Das soll ja auch so sein.
    Wenn Ich nun in die Textbox"Nachname" im (Detailview) einen Namen eingebe soll schon beim erste Buchstaben ein Filter aktiv werden der schon
    mal die ganze DB bzw. Bindingsource durchsucht was mit diesem Buchstaben anfängt und im DGV anzeigen.
    Beim zweiten Buchstaben weiter eingrenzt bis zum lezten Buchstaben.
    Wäre nett wenn jemand da helfen könnte. Ich habe übrigens fast alles im Designer erstellt. (Warum???... weils so schön einfach und Komfortabel ist)
    -Die Deppeneistellungen sind aktiv.-(Option Strict ist also on)
    Elke

    enigma schrieb:

    -Die Deppeneistellungen sind aktiv.-(Option Strict ist also on)
    Dann sind die Deppeneinstellungen ja aber genau nicht aktiv.
    /OT
    Ansonsten musste bei jedem TextChanged einen FilterString generieren und an BindingSource.Filter zuweisen.
    Hier wird auch mit bs.Filter umgegangen: DataExpressions: Filter und berechnete Spalten im Dataset
    sorry etwas falsch ausgedrückt. (option Strikt is on)
    hab mal ein filter versucht.klappt aber nicht

    VB.NET-Quellcode

    1. ​Private Sub tbx_nachname_TextChanged(sender As Object, e As EventArgs) Handles tbx_nachname.TextChanged
    2. AdressenBindingSource.Filter = AdressDataSet.Adressen("Nachname ").Name & " like '" & tbx_nachname.Text & "*'"
    3. End Sub


    Hierbei lässt option strict on keine implizierten Konvertierungen von string in Integer zu.
    und das verstehe ich nicht Warum integer? in der DB liegt die Spalte als string vor
    Es geht dabei um diesen Teil-Ausdruck: AdressDataSet.Adressen("Nachname "). Das in der Klammer ist ein Indexer.
    Mit einem Indexer kann man von einer Auflistung ein einzelnes Element erhalten.
    Tabelle Adressen (als Tabelle) ist natürliche eine Auflistung.
    Und die Tabelle Adressen erwartet als Indexer einen Integer - du gibst ihr aber einen String.
    Haste das von mir gegebene Tut mal angeguckt?

    Ansonsten probierma:

    VB.NET-Quellcode

    1. Private Sub tbx_nachname_TextChanged(sender As Object, e As EventArgs) Handles tbx_nachname.TextChanged
    2. AdressenBindingSource.Filter = "Nachname " & " like '" & tbx_nachname.Text & "*'"
    3. End Sub

    heutzutage formuliert man Strings übrigens wesentlich eleganter:

    VB.NET-Quellcode

    1. AdressenBindingSource.Filter = $"Nachname like '{tbx_nachname.Text}*'"