【问题标题】:Altering DataGrid With TextBox - PowerShell使用 TextBox 更改 DataGrid - PowerShell
【发布时间】:2016-07-29 15:58:55
【问题描述】:

背景:

我正在使用 XML 和 PowerShell 创建一个 GUI。我正在使用 PowerShell 向 GUI 添加功能。在我的 GUI 中,有组合框(下拉菜单)以及过滤数据网格结果的文本框。我目前正在使用文本框的结果更改 Datagrid。

我想要实现的目标:

Datagrid 中的结果会随着文本框中输入的文本而变化。例如,如果用户输入“W”,则将列出所有以“W”开头的结果。

问题:

我无法更改 Datagrid 的内容。我试图编辑 ItemsSource。这不起作用,因为当用户从文本框中收回字符时,Datagrid 没有重新填充表。我还尝试编辑 Datagrid 的 Items 属性。但是,items 属性不可编辑。我找到了类似问题here 的解决方案,但我无法在我当前的代码中使用他的解决方案。

代码:

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) } 

}) 

【问题讨论】:

    标签: wpf powershell datagrid


    【解决方案1】:

    我认为最好制作 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   
    

    【讨论】:

      猜你喜欢
      • 2020-12-04
      • 1970-01-01
      • 2017-04-22
      • 2011-04-23
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 2019-01-26
      相关资源
      最近更新 更多