Bindingsource Filter

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ju1ion.

    Bindingsource Filter

    Guten Morgen,

    Ich liste alle Dateien in einem Ordner mit Hilfe von System.IO -> FileInfo in ein DGV, meine Frage ist es ob ich diese Bindingsource auch filtern kann?

    Dies Funktioniert nicht:

    VB.NET-Quellcode

    1. Me.FileInfoBindingSource.Filter = String.Format("[" & ComboBox1.Text & "]" & " LIKE '{0}%'", "*" & Me.TextBox1.Text)



    Gruss
    Hi,
    Vielleicht hilft dir follgender Code (Zitat):

    Du mußt zwischen DataTable und DataGridView einen DataView ("Datensichtweise") als Filter dazwischenlegen (DataView ist dann die DataSource für den DGV) nach folgendem Beispiel (Sortiment und Lagerort sind Spalten in der DataTable dt_Kunden):

    Quelle

    VB.NET-Quellcode

    1. ' ***DataView-Instanz für DataTable bilden
    2. dv = New DataView(dt_Kunden)
    3. dv.RowFilter = "Sortiment Like " & " 'Z*' " & " AND Lagerort = 'Hochlager'" ' Alle die mit Z beginnen und im Hochlager sind
    4. ' *** Datenbindung an DataGridView
    5. dgv_Kunden.DataSource = dv ' DataView als Datenquelle
    Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen. :thumbup:

    Option Strict On :thumbsup: - Warum?
    Du möchtest doch Einträge, die du in deinem DataGridView hast filtern, oder nicht?

    Soll heißen:
    • Du hast ein DataTable mit dein Einträgen, die angezeigt werden sollen.
    • Du hast ein DataGridView, in dem diese Einträge dargestellt werden.


    Nun benötigst du eine DataView, die dir beim Filtern zur Seite steht.

    Nehmen wir nun folgendes an:
    • dgv_Kunden sei dein DataGridView.
    • dt_Kunden sei der DataTable mit den Einträgen zu deinen Kunden (z. B.: Name, Vorname, etc.). Dieser ist bereits mit Einträgen gefüllt.
    • Du möchtest nun alle Kunden darstellen, deren Name mit einem "Z" beginnt.


    Folgender Quelltext soll dies illustrieren:

    VB.NET-Quellcode

    1. ' ***DataView-Instanz für DataTable bilden
    2. dv_Kunden = New DataView(dt_Kunden)
    3. dv_Kunden.RowFilter = "Name Like " & " 'Z*'" ' Alle Kunden, deren Namen mit Z beginnen
    4. ' *** Datenbindung an DataGridView
    5. dgv_Kunden.DataSource = dv ' DataView als Datenquelle


    Zunächst musst Du eine neue DataView, mit dem DataTable, erzeugen (Zeile 2). Anschließend setzt du den Filter (Zeile 3). Zu guter Letzt musst Du deinem DataGridView sagen, dass die Datenquelle nun deine DataView ist.

    Jetzt müssten die Einträge der DGV entsprechend deines Filters (Zeile 3) augeführt werden.
    Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen. :thumbup:

    Option Strict On :thumbsup: - Warum?
    Oh! Ja Du hast Recht! Wer lesen kann ist klar im Vorteil :rolleyes:

    Aber dann mal auf ein Neues:

    Das müsste dann aber Helfen:

    VB.NET-Quellcode

    1. Private mFiles As New System.ComponentModel.BindingList(Of System.IO.FileInfo)
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. getFiles()
    4. Dim helpList = mFiles.Where(AddressOf checkFilter).ToList
    5. DataGridView1.DataSource = helpList
    6. End Sub
    7. Private Sub getFiles()
    8. Dim FBD As New FolderBrowserDialog
    9. If FBD.ShowDialog = Windows.Forms.DialogResult.OK Then
    10. mFiles.Clear()
    11. For Each nFile As System.IO.FileInfo In New System.IO.DirectoryInfo(FBD.SelectedPath).GetFiles("*.*")
    12. mFiles.Add(nFile)
    13. Next
    14. End If
    15. End Sub
    16. Private Function checkFilter(ByVal item As System.IO.FileInfo) As Boolean
    17. 'Hier deine Prüfung
    18. If item.Name Like "a*" Then
    19. Return True
    20. Else
    21. Return False
    22. End If
    23. End Function
    Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen. :thumbup:

    Option Strict On :thumbsup: - Warum?