eric897
Goto Top

DataGrid nach bestimmten Parameter filtern

Grüße,

ich würde gern in mein DataGrid etwas rausfiltern.
Wie würde denn sowas gehen im Internet finde ich nix außer das hier :

$dataGrid_OVERVIEW.DataSource.filter

Vielleicht weiß jemand wie sowas allgemein geht :D

Content-Key: 6188028622

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

Printed on: May 22, 2024 at 05:05 o'clock

Mitglied: 7907292512
Solution 7907292512 Sep 14, 2023 updated at 11:19:01 (UTC)
Goto Top
Filtere die Quelldaten mittels where-object und weise die Daten dann der DataSource-Eigenschaft zu.
Beispiele findest du hier en Masse.
z.B. Filteroptionen für DataTable

Add-Type -A System.Windows.Forms

$data = get-process
$arraylist = New-Object System.Collections.ArrayList
$arraylist.AddRange(@($data))

$form = New-Object System.Windows.Forms.Form -P @{
    ClientSize = '800,600'  
    Text = "Filter Data"  
}
$dgv = New-Object System.Windows.Forms.DataGridView -P @{
    Location = "10,10"  
    Size = "780,500"  
    DataSource = $arraylist
}
$btnFilter = New-Object System.Windows.Forms.Button -P @{
    Text = "Filter to Explorer.exe process"  
    Location = "10,530"  
    Size = "200,30"  
    add_Click = {
        $data = $arraylist | ? Name -eq 'explorer'  
        $arraylist = New-Object System.Collections.ArrayList
        $arraylist.AddRange(@($data))
        $dgv.DataSource = $arraylist
    }
}
$form.Controls.AddRange(@($dgv,$btnFilter))
$form.ShowDialog() | out-null
Gruß sid
Member: Eric897
Eric897 Sep 14, 2023 at 13:12:57 (UTC)
Goto Top
Zitat von @7907292512:

Filtere die Quelldaten mittels where-object und weise die Daten dann der DataSource-Eigenschaft zu.
Beispiele findest du hier en Masse.
z.B. Filteroptionen für DataTable

Add-Type -A System.Windows.Forms

$data = get-process
$arraylist = New-Object System.Collections.ArrayList
$arraylist.AddRange(@($data))

$form = New-Object System.Windows.Forms.Form -P @{
    ClientSize = '800,600'  
    Text = "Filter Data"  
}
$dgv = New-Object System.Windows.Forms.DataGridView -P @{
    Location = "10,10"  
    Size = "780,500"  
    DataSource = $arraylist
}
$btnFilter = New-Object System.Windows.Forms.Button -P @{
    Text = "Filter to Explorer.exe process"  
    Location = "10,530"  
    Size = "200,30"  
    add_Click = {
        $data = $arraylist | ? Name -eq 'explorer'  
        $arraylist = New-Object System.Collections.ArrayList
        $arraylist.AddRange(@($data))
        $dgv.DataSource = $arraylist
    }
}
$form.Controls.AddRange(@($dgv,$btnFilter))
$form.ShowDialog() | out-null
Gruß sid

Okay vielen Dank ich probiere mich ma daran aus!
Member: Eric897
Eric897 Sep 14, 2023 at 13:23:41 (UTC)
Goto Top
Aber geht auch rausfiltern das heißt es wird dann nicht angezeigt?
Mitglied: 7907292512
Solution 7907292512 Sep 14, 2023, updated at Oct 04, 2023 at 14:24:27 (UTC)
Goto Top
Zitat von @Eric897:

Aber geht auch rausfiltern das heißt es wird dann nicht angezeigt?

Klar einfach mal die verfügbaren Operatoren anschauen
about_Operators
$arraylist | ? Name -notlike '*explorer*'    
$arraylist | ? Name -notin 'explorer','firefox','chrome'    
$arraylist | ? Name -notmatch '^ex..orer$'  
usw....
...


Hier das ganze auch nochmal als Alternative mittels einer Datatable als Datenquelle:
Add-Type -A System.Windows.Forms

# Datenquelle erstellen
$data = New-Object System.Data.DataTable
$data.Columns.AddRange(@("Vorname","Nachname"))  
$data.Rows.Add(@("Max","Muster"))  
$data.Rows.Add(@("Petra","Musterfrau"))  

$form = New-Object System.Windows.Forms.Form -P @{
    ClientSize = '800,600'    
    Text = "Filter Data"  
}
$dgv = New-Object System.Windows.Forms.DataGridView -P @{
    Location = "10,10"    
    Size = "780,500"  
    # Datenquelle dem DataGridView zuweisen
    DataSource = $data
}
$btnFilter = New-Object System.Windows.Forms.Button -P @{
    Text = "Nach Vorname filtern"  
    Location = "10,530"    
    Size = "200,30"    
    add_Click = {
        # Möglichkeiten die Datenquelle des DataGridViews auf bestimmte Einträge zu beschränken
        # für weitere Möglichkeiten und die Filter-Syntax:
        # https:{{comment_single_line_double_slash:0}}

        # Normaler Vergleich
        $data.DefaultView.RowFilter = "Vorname = 'Max'"  
        # Wildcard Vergleich
        #$data.DefaultView.RowFilter = "Vorname like 'Ma*'" 
        # Listenvergleich
        #$data.DefaultView.RowFilter = "Vorname IN ('Max','Petra')" 
    }
}
$form.Controls.AddRange(@($dgv,$btnFilter))
$form.ShowDialog() | out-null


RTFM!
Powershell Leitfaden für Anfänger