vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
DataGridView/BindingSource filtern 
Autor: stefanbla80
Datum: 24.06.20 10:05

Hallo zusammen,

ich bin langsam am verzweifeln und komme hier leider auf keinen grünen Zweig.

Meine Tabelle, die mir mittels eines DataGridView angezeigt wird, würde ich gerne filtern.
Das geht zu gewissen Teilen schon, jedoch würde ich gern meinen bestehenden und funktionierenden Filter erweitern.

Hier ein Ausschnitt
Bisheriger Filter
Dim filter1 As String = "Column_29 Like '" & Trim(Me.ComboBox_Filter.Text) & _
  "%' AND Column_60 Not Like '" & "Project finished" & "%'"
Me.PlanningGuideDataBindingSource.Filter = filter1
Me.PlanningGuideDataDataGridView.Refresh()
Hier filtere ich Spalte 29 nach einem Namen und lasse mir alles anzeigen das nicht "Project finished" in Spalte 60 stehen hat => Funktioniert

Erweiterter Filter
Dim filter1 As String = "Column_29 Like '" & Trim(Me.ComboBox_Filter.Text) & _
  "%' AND ( [Column_60] Not Like '" & "Project finished" & "%' OR [Column_40]" & _
  "Not Like '" & "Project finished" & "%' )"
Me.PlanningGuideDataBindingSource.Filter = filter1
Me.PlanningGuideDataDataGridView.Refresh()
Ich möchte lediglich eine einfache ODER-Verknüpfung einbauen - also filtere nach "Project finished" über zwei Spalten (Spalte 40 und 60)

Leider bekomme ich das nicht gebacken, zu viele Fragezeichen meinerseits welche "Klammern, Hochkommas, Prozentzeichen usw" dort in den String eingebaut werden sollen.

Grüße
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: Manfred X
Datum: 24.06.20 12:05

Hallo!

Das ODER ist aus zwei Bedingungen zusammengestellt. Also setze jeweils eine
Klammer um diese Bedingungen:

( Column_29 Like Combo.text AND column_60 not like Project Finished )
OR
( Column_40 Not like Project Finished )

Verwende in Zukunft aussagekräftige Spaltenbezeichner.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: stefanbla80
Datum: 26.06.20 07:39

Hallo Manfred,

vielen Dank für Deine Antwort.

Das habe ich auch schon in der Art versucht - aber ohne Erfolg.
Sicher liegt es an einem falsch gesetzten Leerzeichen oder Hochkomma.

Dim filter1 As String = "( Column_29 Like '" & Trim(Me.ComboBox_Filter.Text) & _
  "%' AND Column_60 Not Like '" & "Project finished" & "%' ) OR ( Column_40 Not" & _
  "Like '" & "Project finished" & "%' )"
So sieht der String in der Ausgabe aus:
( Column_29 Like 'Hans%' & "%' AND Column_60 Not Like 'Project finished%' ) OR (" & _
  " Column_40 Not Like 'Project finished%' )
Sieht für mich auf den ersten Blick korrekt aus …
Me.PlanningGuideDataBindingSource.Filter = filter1
Me.PlanningGuideDataDataGridView.Refresh()
Grüße
Stefan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: Manfred X
Datum: 26.06.20 13:32

Dieser Filter und seine Wirkung hängt geringfügig vom Inhalt Deiner Datenspalten ab,
den ich nicht kenne.
Du solltest entscheiden, ob der Nutzer in der Textbox ggf. das % eingeben kann
oder ob es im Code stehen soll und imer wirksam wird. In dem Fall mußt Du die
Eingabe des Nutzers kontrollieren (Trim).

Es könnte auch sein, dass Du folgende Bedingung realisieren möchtest:

"( Column_29 Like '" & Trim(Me.ComboBox_Filter.Text) & "%')

AND
(
(Column_60 Not Like '" & "Project finished" & "%' )
OR
( Column_40 Not Like '" & "Project finished" & "%' )"
)

Das And ist die hierarchisch übergeordnete Bedingung und die
beiden OR-Klauseln sind untergeordnet und bilden zusammen die zweite
Bedingung für das AND.

Beitrag wurde zuletzt am 26.06.20 um 13:33:05 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: stefanbla80
Datum: 26.06.20 13:53

In Spalte 29 stehen "Vorname und Nachname"
In Spalte 40 steht "Project finished" oder eben ein anderer Status
In Spalte 60 steht "Project finished" oder eben ein anderer Status

DummyString = "[Column_60] Not Like '" & "Project finished%" & "' AND" & _
  "[Column_40] Not Like '" & "Project finished%" & "'"
DummyString = "( " & DummyString & " ) " & "AND Column_29 Like '" & Trim( _
Me.ComboBox_Filter.Text) & "%'"
 
Me.PlanningGuideDataBindingSource.Filter = DummyString
Me.PlanningGuideDataDataGridView.Refresh()
Zumindest bekomme ich so (mit einem AND statt einem OR) dasRrichtige angezeigt.

Ich möchte mir alles anzeigen, was z. B. den Namen "Hans Wurst" in Spalte 29 hat und alle Projekte die Nicht den Status "Project finished" in Spalte 40 oder Spalte 60 haben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: Manfred X
Datum: 26.06.20 14:23

Ich vermute, Du meinst etwas anderes, nämlich folgendes:

Ich möchte mir alle Datenzeilen anzeigen,
die sowohl z. B. den Namen "Hans Wurst" in Spalte 29 haben
als auch Nicht den Status "Project finished" in einer der beiden
Spalten 40 oder 60 haben.

Meinst Du das?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: stefanbla80
Datum: 26.06.20 14:31

genau
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: Manfred X
Datum: 26.06.20 14:40

Die beiden OR-Bedingungen müssen in eine gemeinsame Klammer.
Ansonsten benötigst Du keine weiteren Klammern.
Der Übersichtlichkeit halber kanst Du aber auch die
Klammern setzten die ich vorhin gepostet habe.
Wo genau Du eine & benötigst, hängt von Deinen Daten ab.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: DataGridView/BindingSource filtern 
Autor: stefanbla80
Datum: 08.07.20 08:23

Hallo zusammen,
das Thema ist mit den ganze, Klammern, Hochkommas, Leerzeichn wirklich etwas "tricky", aber habe das nun für meine Fälle so hinbekommen.

Anbei mein Code - vielen Danl nochmals für die Hilfestellungen.

Private Sub Filter()
        Cursor.Current = Cursors.WaitCursor
        Dim DummyString0 As String = ""
        Dim DummyString1 As String = ""
        Dim DummyString2 As String = ""
        Dim DummyString3 As String = ""
        Dim DummyString4 As String = ""
        Dim FilterString As String = ""
 
        DummyString1 = "[Column_29] Like '" & Trim(Me.ComboBox_Filter.Text) & _
          "'"
        DummyString2 = "[Column_40] Like '" & Trim(Me.ComboBox_Filter2.Text) & _
        "' OR [Column_60] Like '" & Trim(Me.ComboBox_Filter2.Text) & "'"
        DummyString3 = "[Column_37] Like '" & Trim(Me.ComboBox_Filter3.Text) & _
        "'"
        DummyString4 = "[Column_40] Not Like '" & "Project finished" & "' AND" & _
        "[Column_60] Not Like '" & "Project finished" & "'" 'wegen Not Like 
        ' wird das OR zum AND
 
        If Me.ComboBox_Filter3.Text = "" Then
            If Me.ComboBox_Filter.Text = "" Then
                If Me.ComboBox_Filter2.Text <> "" Then
                    If Me.ComboBox_Filter2.Text = "Project finished" Then _
                      FilterString = DummyString2
                    If Me.ComboBox_Filter2.Text <> "Project finished" Then _
                    FilterString = "( ( " & DummyString4 & " )" & " AND " & "(" & _
                    "" & DummyString2 & " ) )"
                Else
                    FilterString = ""
                End If
            ElseIf Me.ComboBox_Filter.Text <> "" Then
                If Me.ComboBox_Filter2.Text <> "" Then
                    If Me.ComboBox_Filter2.Text = "Project finished" Then _
                      FilterString = "( " & DummyString2 & " )" & " AND " & _
                      DummyString1
                    If Me.ComboBox_Filter2.Text <> "Project finished" Then _
                    FilterString = "( ( " & DummyString4 & " )" & " AND " & "(" & _
                    "" & DummyString2 & " ) )" & " AND " & DummyString1
                Else
                    FilterString = "( " & DummyString4 & " )" & " AND " & _
                      DummyString1
                End If
            End If
        ElseIf Me.ComboBox_Filter3.Text <> "" Then
            If Me.ComboBox_Filter.Text = "" Then
                If Me.ComboBox_Filter2.Text <> "" Then
                    If Me.ComboBox_Filter2.Text = "Project finished" Then _
                      FilterString = "( " & DummyString2 & " )" & " AND " & _
                      DummyString3
                    If Me.ComboBox_Filter2.Text <> "Project finished" Then _
                    FilterString = "( ( " & DummyString4 & " )" & " AND " & "(" & _
                    "" & DummyString2 & " ) )" & " AND " & DummyString3
                Else
                    FilterString = DummyString3
                End If
            ElseIf Me.ComboBox_Filter.Text <> "" Then
                If Me.ComboBox_Filter2.Text <> "" Then
                    If Me.ComboBox_Filter2.Text = "Project finished" Then _
                      FilterString = "( " & DummyString2 & " )" & " AND " & _
                      DummyString1 & " AND " & DummyString3
                    If Me.ComboBox_Filter2.Text <> "Project finished" Then _
                    FilterString = "( ( " & DummyString4 & " )" & " AND " & "(" & _
                    "" & DummyString2 & " ) )" & " AND " & DummyString1 & " AND" & _
                    "" & DummyString3
                Else
                    FilterString = "( " & DummyString4 & " )" & " AND " & _
                      DummyString1 & " AND " & DummyString3
                End If
            End If
        End If
 
        System.Threading.Thread.Sleep(250)
 
        Me.PlanningGuideDataBindingSource.Filter = FilterString
        Me.PlanningGuideDataDataGridView.Refresh()
        Cursor.Current = Cursors.Default
    End Sub
Grüße
Stefan
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-2024 vb@rchiv 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