2016-07-29 2 views
0

배경 :변경 데이터 그리드 - PowerShell을

내가 XML 및 PowerShell을 사용하여 GUI를 생성하고있다. PowerShell을 사용하여 GUI에 기능을 추가하고 있습니다. 내 GUI에는 Comboboxes (드롭 다운 meuns)뿐만 아니라 Datagrid의 결과를 필터링하는 텍스트 상자가 있습니다. 나는 현재 텍스트 상자의 결과로 Datagrid를 변경하려고하고있다.

것은 내가 달성하기 위해 노력하고있어 : 텍스트 상자에 입력 한 텍스트와 DataGrid에 변화

결과. 예를 들어 사용자가 "W"를 입력하면 "W"로 시작하는 모든 결과가 나열됩니다.

문제점 :

나는 문제가에서 Datagrid의 내용을 변경하는 데 문제. ItemsSource를 편집하려고했습니다. 이것은 사용자가 텍스트 상자에서 문자를 철회 할 때 Datagrid가 테이블을 다시 채우지 않았기 때문에 작동하지 않았습니다. 또한 Datagrid의 Items 속성을 편집하려고했습니다. 그러나 items 속성은 편집 할 수 없습니다. 나는 비슷한 문제에 대한 해결책을 찾았으나 현재 해결책으로는 사용할 수 없었다.

코드 :

add-type @" 
    public class Server 
    { 
     public Server() {} 

     public string Column1 { get; set; } 
     public string Column2 { get; set; } 
     public string Column3 { get; set; } 
     public string Column4 { get; set; } 
     public string Column5 { get; set; } 
     public string Column6 { get; set; } 
    } 
"@ -Language CsharpVersion3 


[System.Collections.ArrayList] $Server = New-Object "System.Collections.ArrayList" 

$GUI | ForEach-Object { 
$ServerToAdd = new-object Server 
$ServerToAdd.Column1 = $_.Results1 
$ServerToAdd.Column2 = $_.Results2 
$ServerToAdd.Column3 = $_.Results3 
$ServerToAdd.Column4 = $_.Results4 
$ServerToAdd.Column5 = $_.Results5 
$ServerToAdd.Column6 = $_.Results6 

$Server.add($ServerToAdd) | Out-Null 
} 

$GUI.DataGrid.ItemsSource = $Server 

$GUI.TextBox.Add_TextChanged({ 

    $InputText = $GUI.TextBox.Text 

    $GUI.DataGrid.Items | Where-Object { $_.Column1.Contains($InputText) } 

}) 

답변

1

나는 DataTable을 개체 대신 배열을 만들기 위해 가장 좋은 것 같아요.

당신은 다음과 같이 필터링을 수행 쉽게 다음 당신에게 데이터 소스로 데이터 그리드 컨트롤의 넣을 수 있습니다 :

$DataSource.DefaultView.RowFilter = "Column1 LIKE 'W%'" 
$DataGrid.DataSource = $DataSource 

나는 그것이 어떻게 작동하는지 예를했습니다. 나는 그 아이디어를 얻을 수 있기를 바랍니다.

$dt = New-Object system.Data.DataTable 
$dt.Columns.Add((New-Object System.Data.DataColumn('Column1', 'string'))) 
$dt.Columns.Add((New-Object System.Data.DataColumn('Column2', 'int'))) 
$dt.Columns.Add((New-Object System.Data.DataColumn('Column3', 'string'))) 
$null=$dt.Rows.Add('RowOne',100,'This') 
$null=$dt.Rows.Add('RowTwo',150,'That') 
$null=$dt.Rows.Add('RowThree',200,'What') 

$filter = "Column2 > 100 AND Column3 LIKE 'W%'" 
$dt.DefaultView.RowFilter = $filter 
$dt.DefaultView 

Column1 Column2 Column3 
------- ------- ------- 
RowThree  200 What 
+0

고맙습니다. 이것은 효과가 있었다. –

관련 문제