【问题标题】:How can I add sorting by clicking on the column header in this GridView?如何通过单击此 GridView 中的列标题添加排序?
【发布时间】:2011-04-29 08:54:59
【问题描述】:
ipmo WPK

$ConnectionString = $ConnectionString = "Server=localhost;Integrated Security=True"
$conn = new-object System.Data.SQLClient.SQLConnection
$conn.ConnectionString = $ConnectionString 
$conn.Open() 

function Invoke-sql1
{
    param( [string]$sql,
           [System.Data.SQLClient.SQLConnection]$connection
           )
    $cmd = new-object System.Data.SQLClient.SQLCommand($sql,$connection)
    $ds = New-Object system.Data.DataSet
    $da = New-Object System.Data.SQLClient.SQLDataAdapter($cmd)
    $da.fill($ds) | Out-Null
    return $ds.tables[0]
}

function Show-Bockmarks ($conn) {
        New-ListView -Name ListView -View {
           New-GridView -AllowsColumnReorder -Columns {
               New-GridViewColumn "title" 
           }
    } -show -On_Loaded {
            $ff_sql = @"
SELECT 'abc' title
union
SELECT 'xyz' title
union
SELECT 'efg' title
"@
            $TableView = $window | Get-ChildControl ListView
            $TableView.ItemsSource = @(Invoke-sql1 -sql $ff_sql -connection $conn)
             } 
}

Show-Bockmarks $conn

编辑: 我将代码转换为 XAML

ipmo WPK

$ConnectionString = $ConnectionString = "Server=localhost;Integrated Security=True"
$conn = new-object System.Data.SQLClient.SQLConnection
$conn.ConnectionString = $ConnectionString 
$conn.Open() 

function Invoke-sql1
{
    param( [string]$sql,
           [System.Data.SQLClient.SQLConnection]$connection
           )
    $cmd = new-object System.Data.SQLClient.SQLCommand($sql,$connection)
    $ds = New-Object system.Data.DataSet
    $da = New-Object System.Data.SQLClient.SQLDataAdapter($cmd)
    $da.fill($ds) | Out-Null
    return $ds.tables[0]
}

function Show-Bockmarks ($conn) {

[xml] $xaml = @"
<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="MainWindow" >
<ListView ItemsSource="{Binding Persons}"
      IsSynchronizedWithCurrentItem="True"
      Name="Listview">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="title"
                                DisplayMemberBinding="{Binding title}" 
                                />
                <GridViewColumn Header="itemid"
                                DisplayMemberBinding="{Binding itemid}" 
                                />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $reader )

$ff_sql = @"
SELECT 'abc' title, 3 itemid
union
SELECT 'xyz' title, 2 itemid
union
SELECT 'efg' title, 1 itemid
"@

$TableView = $Form.FindName("Listview")
$TableView.ItemsSource = @(Invoke-sql1 -sql $ff_sql -connection $conn)

$Form.ShowDialog() #| out-null
}

Show-Bockmarks $conn

但是当我添加 Thomas Levesque 提出的行时

ipmo WPK

$ConnectionString = $ConnectionString = "Server=localhost;Integrated Security=True"
$conn = new-object System.Data.SQLClient.SQLConnection
$conn.ConnectionString = $ConnectionString 
$conn.Open() 

function Invoke-sql1
{
    param( [string]$sql,
           [System.Data.SQLClient.SQLConnection]$connection
           )
    $cmd = new-object System.Data.SQLClient.SQLCommand($sql,$connection)
    $ds = New-Object system.Data.DataSet
    $da = New-Object System.Data.SQLClient.SQLDataAdapter($cmd)
    $da.fill($ds) | Out-Null
    return $ds.tables[0]
}

function Show-Bockmarks ($conn) {

[xml] $xaml = @"
<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:util="clr-namespace:TheNameSpace;assembly=TheAssembly"
  Title="MainWindow" >
<ListView ItemsSource="{Binding Persons}"
      IsSynchronizedWithCurrentItem="True"
       util:GridViewSort.AutoSort="True"
      Name="Listview">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="title"
                                DisplayMemberBinding="{Binding title}"
                                util:GridViewSort.PropertyName="title" 
                                />
                <GridViewColumn Header="itemid"
                                DisplayMemberBinding="{Binding itemid}" 
                                util:GridViewSort.PropertyName="itemid" 
                                />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $reader )

$ff_sql = @"
SELECT 'abc' title, 3 itemid
union
SELECT 'xyz' title, 2 itemid
union
SELECT 'efg' title, 1 itemid
"@

$TableView = $Form.FindName("Listview")
$TableView.ItemsSource = @(Invoke-sql1 -sql $ff_sql -connection $conn)

$Form.ShowDialog() #| out-null
}

Show-Bockmarks $conn

我得到了错误

Exception calling "Load" with "1" argument(s): "The property 'GridViewSort.AutoSort' does not exist in XML namespace 'clr-namespace:TheNameSpace;assembly=TheAssembly'. Line '0' 
Position '0'."

我想我必须注册一些程序集。

【问题讨论】:

    标签: wpf sorting gridview powershell wpk


    【解决方案1】:

    有关 XAML 解决方案,请参阅 this blog post(和 this one

    您还可以使用GridViewSort.SetAutoSortGridViewSort.SetPropertyName 方法在代码中使用此解决方案。我不知道 Powershell 语法,但这里是 C#:

    GridViewSort.SetAutoSort(TableView, true);
    GridViewSort.SetPropertyName(TitleColumn, "title");
    

    【讨论】:

    • 问题正是将 XAML 解决方案转换为代码
    • 已将我的代码转换为 XAML,但无法使 util 工作。见上文。
    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多