vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Filter nach erstem Buchstaben 
Autor: Knabber
Datum: 04.09.22 22:58

Hallo
Weiss jemand ob es folgendes gibt:
Ich möchte in einer Textbox einen Buchstaben eingeben und danach soll aus dem Dataset/Bindingsource alles im
Datagridview angezeigt werden was mit dem Buchstaben anfängt. Gebe Ich den 2. Buchstabe ein soll weitergefiltert werden. Bis zum schluss nur noch ein Datensatz übrig bleibt.(sofern vorhanden)
Kann da jemand helfen ?
Gruß
Sabine
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter nach erstem Buchstaben 
Autor: Manfred X
Datum: 05.09.22 00:43

Hallo!


Die simple Lösung (Textbox-Textchanged-Event und der magische Stern im String-Filter):


Public Class frmFilter
 
 
    Dim WithEvents tboFilter As New TextBox With
        {.Parent = Me, .Location = New Point(10, 10), .Width = 300}
 
    Dim bs As New BindingSource
    Dim dt As New DataTable
    Dim dgv As New DataGridView With
        {.Parent = Me, .Top = 100, .Size = New Size(300, 300), .DataSource = bs}
 
 
    Private Sub frmFilter_Load(sender As Object, e As EventArgs) Handles _
      MyBase.Load
 
        'Testdaten
        dt.Columns.Add("irgendwas")
        With dt.Rows
            .Add("A")
            .Add("aa")
            .Add("b")
            .Add("BB")
            .Add("c")
            .Add("cC")
            .Add("aAauuu")
        End With
 
        bs.DataSource = dt
    End Sub
 
 
    Private Sub tboFilter_TextChanged(sender As Object, e As EventArgs) _
        Handles tboFilter.TextChanged
 
        bs.Filter = dt.Columns("irgendwas").ColumnName & " like '" & _
          tboFilter.Text & "*'"
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter nach erstem Buchstaben 
Autor: Knabber
Datum: 05.09.22 09:14

Hallo
erst einmel vielen Dank für die Hilfe.
Das es nur ein Einzeiler ist wäre mir nicht im Traum eingefallen.
Ich habe versucht den code bei mir anzupassen. leider funktioniert er nicht wie gewünscht.
 Private Sub tbx_name_TextChanged(sender As Object, e As EventArgs) Handles _
   tbx_name.TextChanged
        Dim bs As New BindingSource
        Dim dt As New DataTable
        bs.DataSource = dt
 
        DatenBindingSource.Filter = dt.Columns("Name").ColumnName & " like '" & _
          tbx_name.Text & "*'"
 
    End Sub
Ich bekomme eine Fehlermeldung

"NullRefereceException wurde nicht behandelt."

In jeder Celle der Column "Name" steht aber ein Name

Das Dataset heisst "BDSDataset"
Meine Tabelle heisst "Daten"
Die Spalte heisst "Name"
Die Textbox heisst "tbx_name.text"

Ich hoffe das ich deinen Code richtig umgesetzt habe
Die Textbox(Detailview), sowie das Datagridview sind Gebunden

Gruß
Sabine

Beitrag wurde zuletzt am 05.09.22 um 09:15:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter nach erstem Buchstaben 
Autor: Manfred X
Datum: 05.09.22 12:29

Hallo!

Die Datenklassen dürfen nicht im Eventhandler (Text-Changed) deklariert werden.
Du musst beim Filtern die Bindingsource Deiner Datenbasis (=gefüllte Datatable) benutzen.
Du benötigst also eine Bindingsource, an die BDSDataset.Daten gebunden ist
(Datasource-Eigenschaft).
Diese Bindingsource-Instanz sollte mindestens auf Formularebene (eventuell im Designer)
deklariert sein, wie in meinem Beispiel.

Du erstellst in Deinem Code lokal im Eventhandler eine (leere) Tabelle.
Befasse Dich einmal mit dem Gültigkeitsbereich von Variablen-Deklarationen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter nach erstem Buchstaben 
Autor: Knabber
Datum: 08.09.22 08:21

so. habe nun viel zeit damit verbracht
Habe im Designer eine neue Tabelle erstellt "Name"
Dann im Textchanged alles so eingetragen wie es nach meinen Vorstellungen richtig sein müsste.(nach deinem Code)
Es gibt keine Fehlermeldung. aber Filtern tut er auch nicht.


Private Sub tbx_name_TextChanged(sender As Object, e As EventArgs) Handles _
  tbx_name.TextChanged
 
        Dim bs As New BindingSource
        Dim dt As New NameDataTable
 
        bs.DataSource = dt
 
        bs.Filter = dt.Columns("Name").ColumnName & " like '" & tbx_name.Text & _
          "*'"
end sub
konntest du noch mal schauen wo mein Fehler dabei ist?
gruß
Sa
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Filter nach erstem Buchstaben 
Autor: Manfred X
Datum: 08.09.22 08:46

Hallo!

Ich kann nur erneut schreiben, was ich bereits geschrieben habe.
Du mußt Deine (im Designer erstellte) Tabelle an eine auf Formularebene
deklarierte Bindingsource binden, die wiederum an einem Grid hängt.
Diese Bindingsource ist vermutlich vom Designer bereits erstellt worden.
Sie muß im Textchanged-Event zum Filtern verwendet werden.

Befasse Dich unbedingt mit dem Geltungsbereich von Variablen-Deklarationen.
Variablen, die innerhalb einer Routine deklariert sind, existieren nur so lange,
bis die Routine beendet ist.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2022 [email protected] Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel