2011-04-30 56 views
3

我覺得這個問題關於loading .net 4.0 dll in Powershell如何在PowerShell ISE中使用WPF DataGrid(.Net 4.0)?

現在我想知道哪些添加型我必須使用,要能夠使用WPF Datagrid從PowerShell的ISE

以下工作

[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"> 
    <DataGrid Height="200" Width="500" HorizontalAlignment="Left" Margin="12,21,0,0" 
    Name="McDataGrid" VerticalAlignment="Top" RowHeight="30" ColumnWidth="100"  > 
</Window> 
"@ 
$reader=(New-Object System.Xml.XmlNodeReader $xaml) 
$Form=[Windows.Markup.XamlReader]::Load($reader) 

$Form.ShowDialog() 
+0

[There](http://fr.w3support.net/index.php?db=so&id=687754)似乎是WPF工具包的一些示例。 – JPBlanc 2011-05-01 09:19:52

+0

爲什麼任何人都應該安裝WPF工具包3.5,當他有.NET 4.0時?兩者都有點不同 – 2011-05-01 10:43:10

回答

3

之前,它是多個錯誤的組合。

  1. 的斜線缺少的標籤
  2. 年底我有一個錯字inpowershell_ise.exe.Config和.Net 4.0組件沒有加載
  3. 這是一個很好的檢查哪些組件是加載了

    [System.AppDomain] :: CurrentDomain.GetAssemblies()|排序位置

現在,這裏是一個可行的解決方案

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="True" 
      HorizontalAlignment="Left" 
      Name="dataGrid1" 
      VerticalAlignment="Top" 
      Width="330" 
      HeadersVisibility="All" 
      > 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="title" 
           Binding="{Binding title}" 
           /> 
       <DataGridTextColumn Header="itemid" 
           Binding="{Binding itemid}" 
           /> 
      </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 = "Data Source=localhost;Initial Catalog=ABDATA;Integrated Security=True" 
$con.open() 

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

$dg = $Form.FindName("dataGrid1") 
$dg.ItemsSource = @(Invoke-sql1 $sql $con) 
$Form.ShowDialog() 

唯一莫諾爾問題是,我必須定義的列自己。我認爲這可以自動完成。