daemmerung
Goto Top

Powershell - DataGridView filtern - BindingSource ist die Quelle

Hallo zusammen,

irgendwie funktioniert das filtern des bindingSource-Objekts nicht.

Die BindingSource wird wie folgt deklariert:
$script:bindingSourceSessions = New-Object System.Windows.Forms.BindingSource 

Die Eigenschaft "datasource" wird wie folgt befüllt und anschließend an das DataGridView-Objekt übergeben:
[System.Collections.ArrayList]$listSessions = @(Get-OpenSessions)
    $script:bindingSourceSessions.datasource = $listSessions 
    
    $DataGridViewSessions.DataSource = $script:BindingSourceSessions 

Bis hierhin funktioniert alles einwandfrei. Die DataGridView wird korrekt befüllt (also alle Objekte + deren Eigenschaften).

Über der DataGridView (also innerhalb der GUI) habe ich ein Textfeld. Die Eingaben werden entsprechend getriggert und an die Eigenschaft Filter übergeben, also wie folgt:
$TextboxSearchSession_TextChanged = 
{
    $script:bindingSourceSessions.Filter = "Username LIKE 'bla'"  
    Write-Host $script:bindingSourceSessions.Count
    #$DataGridViewSessions.DataSource = $script:bindingSourceSessions
}

count gibt mir nachwievor 2 Objekte zurück, obwohl es kein Objekt gibt, bei dem die Eigenschaft "Username" das Wort "bla" enthält. Es müsste also 0 zurückgegeben werden.

Die Objekte, die auch in der DataGridView angezeigt werden, sehen wie folgt aus:
Username      Client                                 ClientIP                              
--------      ------                                 --------                              
Administrator [XXX] [XXX]
Administrator [XXX]            [XXX]           

Hat jemand eine Idee? Wo ist mein Denkfehler? Gibt es noch eine andere Möglichkeit die BindingSource zu filtern? Ich möchte ungern über Where-Object filtern, indem ich den gewünschten String ermittel und der datasource-Eigenschaft der dataGridView zufüge.

Wenn ihr noch Infos braucht, kurz Bescheid geben.

Viele Grüße
Toni

Content-Key: 561670

Url: https://administrator.de/contentid/561670

Printed on: May 4, 2024 at 19:05 o'clock

Member: godlie
godlie Mar 29, 2020 at 06:46:01 (UTC)
Goto Top
Hallo,
du musst deinen Filter auf den View des Datagrid legen

$DataGridViewSessions. DefaultView. RowFilter...... 

Filtering Datagrid c#
Member: Daemmerung
Daemmerung Mar 29, 2020 at 10:00:01 (UTC)
Goto Top
Moin,

dein Beispiel bezieht sich leider auf ein DataTable-Objekt, wenn ich mich nicht irre. Zumindest gibt es bei meinem DataGridView-Objekt die Eigenschaft RowFilter nicht.

Grüße
Toni
Member: godlie
godlie Mar 29, 2020 at 10:04:59 (UTC)
Goto Top
Hallo,

Hab mich da vertan, der Filter soll auf die DataSource kommen. Das sollte bei dir $listSessions sein.
Member: Daemmerung
Daemmerung Mar 29, 2020 at 10:50:35 (UTC)
Goto Top
$script:bindingSourceSessions ist ein Objekt vom Typ BindingSource, das die Eigenschaft defaultView bzw. RowFilter nicht hat. Die einzige Eigenschaft, die es bei der BindingSource gibt ist "Filter" und das funktioniert leider nicht, ohne Fehlermeldung. Irgendwie wird es einfach nicht ausgeführt. Es gibt auch keine Methode, mit der ich irgendwie sagen kann, er soll das Filtern starten.
Member: godlie
Solution godlie Mar 29, 2020 at 10:54:10 (UTC)
Goto Top
Dann cast dir das Objekt zu einer Datatable.
Mitglied: 143127
Solution 143127 Mar 29, 2020 updated at 14:40:42 (UTC)
Goto Top
Jepp, wandle dir das Data-Object in ne DataTable um
https://gallery.technet.microsoft.com/scriptcenter/4208a159-a52e-4b99-83 ...
Member: Daemmerung
Daemmerung Mar 29, 2020 at 15:55:42 (UTC)
Goto Top
Hallo zusammen,

danke für eure Antworten und danke an @143127 für den praktischen Link. Sowas Ähnliches hatte ich als Alternative vor zu bauen, da es ja keine Möglichkeit gibt dem DataTable einfach eine Source zuzuweisen. Das ist auch der Grund, warum ich den Weg zur DataTable vermieden habe. Die BindingSource-Variante war praktischer und dynamischer (vielleicht auch perfomanter).

Ich hab mir jetzt erstmal damit geholfen, dass ich einen weiteren Button erstellt habe, mit dem ich die Suche starte. In der nächsten Version werd ich dann die DataTable einbauen und kann besser "live" filtern.

Danke für eure Unterstützung! face-smile

Viele Grüße und einen schönen Restsonntag
Toni