3 Stimmen

Wie verwendet man WPF DataGrid (.Net 4.0) in PowerShell ISE?

Ich fand diese Frage über Laden von .net 4.0 dll in Powershell .

Nun möchte ich wissen, welchen Add-Type ich verwenden muss, um die WPF-Datengitter von PowerShell ISE

vor den folgenden Arbeiten

[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()

3voto

bernd_k Punkte 10952

Es war eine Kombination aus mehreren Fehlern.

  1. Am Ende des Tags fehlte ein Schrägstrich
  2. Ich hatte einen TYPO inpowershell_ise.exe.Config und die .Net 4.0-Assemblies wurden nicht geladen
  3. Es ist gut zu prüfen, welche Baugruppen mit

    [System.AppDomain]::CurrentDomain.GetAssemblies() | Sortierstelle

Jetzt gibt es eine funktionierende Lösung

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() 

Das einzige Problem ist, dass ich die Spalten selbst definieren muss. Ich dachte, das könnte man automatisch machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X