Как использовать WPF DataGrid (.Net 4.0) в PowerShell ISE? - PullRequest
3 голосов
/ 30 апреля 2011

Я нашел этот вопрос о загрузке .net 4.0 dll в Powershell .

Теперь я хочу знать, какой Add-Type я должен использовать, чтобы иметь возможность использовать 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() 

1 Ответ

3 голосов
/ 01 мая 2011

Это была комбинация нескольких ошибок.

  1. Отсутствовал косая черта в конце тега
  2. У меня был TYPO 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() 

Единственная проблема монора в том, что я должен определить столбцы самостоятельно.Я думал, что это можно сделать автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...