| |
VB.NET - Ein- und UmsteigerDataGridView/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 | |
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. | |
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 | |
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. | |
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. | |
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? | |
Re: DataGridView/BindingSource filtern | | | Autor: stefanbla80 | Datum: 26.06.20 14:31 |
| genau | |
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. | |
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 | |
| 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 |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|