BindingSource Filter

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    BindingSource Filter

    Hallo zusammen,

    mit dem folgenden Code filtere ich in meiner BindingSource.

    VB.NET-Quellcode

    1. Private Sub ComboBox_Filter1_SelectedIndexChanged(ByVal sender As _
    2. System.Object, ByVal e As System.EventArgs) Handles _
    3. ComboBox_Filter1.SelectedIndexChanged
    4. Dim DummyString As String = ""
    5. Me.ProjectPanelDataBindingSource.Filter = ""
    6. Me.ProjectPanelDataDataGridView.Visible = False
    7. If Me.ComboBox_Filter1.Text <> vbNullString Then
    8. With Me.ProjectPanelDataDataGridView
    9. For Spalte As Integer = 1 To .Columns.Count - 1
    10. DummyString = DummyString & "[" & .Columns(Spalte).Name & _
    11. "] LIKE '*" & Me.ComboBox_Filter1.Text & "*' OR "
    12. 'DummyString = DummyString & "%' AND Column_12 Not Like '"
    13. ' & "Project finished" & "%'"
    14. Next
    15. End With
    16. If Microsoft.VisualBasic.Right(DummyString, 4) = " OR " Then
    17. DummyString = Mid(DummyString, 1, Len(DummyString) - 4)
    18. End If
    19. End If
    20. Me.ProjectPanelDataBindingSource.Filter = DummyString
    21. Me.ProjectPanelDataDataGridView.Visible = True
    22. End Sub


    Hauptsächlich will ich nach Personen filtern.
    Mein Problem ist:
    1.) Filter nach Projektverantwortung (Personen) => ComboBox_Filter1
    2.) Filter im gleichen Zug nach Projekten, nicht den Status "Project finished" haben

    Ich bekomme es nicht hin beide Filter zu "kombinieren".

    Grüße
    Stefan
    Willkommen im Forum.
    Deine Daten sind etwas knapp gesät. Was kann sich denn - außer "Project finished" - in jener Spalte befinden? In wievielen Spalten sind wenn überall Namen drin?
    Wo befinden sich die Rohdaten? In welcher Art von Container? tDS? Eigene Klassen? Vorweg: "nur im DataGridView" ist keine akzeptable Antwort ;)
    Diese OR-Verknüpfungs- und Entfernungsgeschichte kannst Du Dir sparen, indem Du jeden Filter in nem eigenen String speicherst und am Ende mit String.Join(" OR ", DeineFilterstrings) alles miteinander verknüpfst.
    Der VisualBasic-Namespace sollte raus.
    Die CEs sind etwas ... defaultmäßig benannt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    also ich reime mir aus dem Code und dem Post folgendes zusammen:
    ein komplexer Filter-Ausdruck soll gebildet werden.
    Alle Spalten ausser der ersten eines DatagridViews generieren je ein FilterSegment.
    Diese Filtersegmente sollen mit OR verknüpft sein - quasi eine Volltextsuche.
    Ein weiteres FilterSegment will in irgendeiner Spalte den Eintrag "Project finished" nicht zulassen.
    Dieses FilterSegment soll mit den vorgenannten AND-verknüpft sein.

    Also Ergebnis iwie was wie:

    SQL-Abfrage

    1. "(Column1 Like '%pattern%' OR Column2 Like '%pattern%' [...]) AND ColumnProjektStatus <> 'Project finished'"


    Sowas ist nicht soo schwer zu basteln, wenn man Vorraussetzungen dafür schafft.
    1) eine List(Of STring) mit den zu verodernden FilterSegmenten drin
    2) ein String mit dem zu verundendem FilterSegment drin.

    (Natürlich nur, wenn ich mit meinem ZUsammengereimten Überlegungen richtig liege)