如何使用PowerShell将SQL数据导入WPF DataGrid?

时间:2016-05-20 13:50:07

标签: wpf powershell datagrid

我正在尝试将我的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()

如果还有其他办法,请告诉我。

1 个答案:

答案 0 :(得分:0)

在函数Invoke-sql1中,将return语句更改为:

  

返回$ ds.tables [0] .DefaultView

或者,如果您想继续返回.rows,则需要更改要编入ItemArray的绑定。

Binding="{Binding ItemArray[0]}"
Binding="{Binding ItemArray[1]}"
etc...