背景:
我正在使用XML和PowerShell创建一个GUI。我正在使用PowerShell向GUI添加功能。在我的GUI中,有Comboboxes (下拉meuns),也有一个textbox,它过滤了Datagrid的结果。我目前正在用文本框的结果来修改Datagrid。
我想要达到的目标:
当文本输入到文本框中时,数据栅格中的更改结果。例如,如果用户输入"W",将列出以"W“开头的所有结果。
问题:
我在改变数据格力的内容上有困难。我尝试过编辑ItemsSource。这不起作用,因为当用户从文本框中撤回字符时,数据农业没有重新填充表。我还试图编辑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) }
}) 发布于 2016-07-29 16:49:13
我认为最好是让DataTable对象而不是数组。
然后,您可以将其作为DataSource放在DataGrid控件中,然后轻松地执行如下过滤:
$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 https://stackoverflow.com/questions/38663029
复制相似问题