我正在尝试将我的sql查询数据添加到WPF powershell应用程序中。在$dg
项目中,我看到了SQL查询返回的计算机名称,但是数据网格没有被填充。
这是我的代码
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].rows
}
[xml] $xaml = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid
AutoGenerateColumns="False"
HorizontalAlignment="Left"
Name="dataGrid1"
VerticalAlignment="Top"
Width="330"
HeadersVisibility="All"
>
<DataGrid.Columns>
<DataGridTextColumn Header="SystemName"
Binding="{Binding SystemName}"
/>
<DataGridTextColumn Header="ProcessorLoad"
Binding="{Binding ProcessorLoad}"
/>
<DataGridTextColumn Header="CreatedDate"
Binding="{Binding CreatedDate}"
/>
</DataGrid.Columns>
</DataGrid >
</Grid>
</Window>
"@
$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Form=[Windows.Markup.XamlReader]::Load( $reader )
$con = New-Object System.Data.SqlClient.SqlConnection
$con.ConnectionString=@"
DataSource=JAPDC\SQLEXPRESS;
IntegratedSecurity=True;
Initial Catalog=TestDB;
"@
$con.open()
$sql = “SELECT t1.SystemName, t1.ProcessorLoad, t1.CreatedDate
FROM [TestDB].[dbo].[CPUPerformance] t1
INNER JOIN (SELECT Max(CreatedDate) CreatedDate, SystemName
FROM [TestDB].[dbo].[CPUPerformance]
GROUP BY [TestDB].[dbo].[CPUPerformance].SystemName ) AS t2
ON
t1.SystemName = t2.SystemName
and t1.CreatedDate = t2.CreatedDate
ORDER BY CreatedDate DESC ”
$dg = $Form.FindName("dataGrid1")
$dg.ItemsSource = @(Invoke-sql1 $sql $con)
$dg
$Form.ShowDialog()
如果还有其他办法,请告诉我。
答案 0 :(得分:0)
在函数Invoke-sql1中,将return语句更改为:
返回$ ds.tables [0] .DefaultView
或者,如果您想继续返回.rows,则需要更改要编入ItemArray的绑定。
Binding="{Binding ItemArray[0]}"
Binding="{Binding ItemArray[1]}"
etc...