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'."
我想我必须注册一些程序集。
答案 0 :(得分:2)
有关XAML解决方案,请参阅this blog post(和this one)
您还可以使用GridViewSort.SetAutoSort
和GridViewSort.SetPropertyName
方法在代码中使用此解决方案。我不知道Powershell语法,但这里是C#:
GridViewSort.SetAutoSort(TableView, true);
GridViewSort.SetPropertyName(TitleColumn, "title");