动态绑定数据网格WPF

时间:2013-11-03 07:26:48

标签: wpf vb.net xaml datagrid

我正在动态地将数据绑定到数据网格,但它不显示数据。它给了我这五列:RowError,RowState,table,ItemArray和HasError。

但是行数是正确的,它给出的数量和我在数据库中的行数一样。

这是Vb代码:

Dim con As New OdbcConnection("dsn=PAUSPAN")
con.Open()
Dim cmd As New OdbcCommand("select * from tbl_chart", con)

Dim da As New OdbcDataAdapter(cmd)
'Dim dt As New DataTable("a")
Dim ds As New DataSet()
ds.Tables.Add("a")

da.Fill(ds, "a")
MsgBox(ds.Tables("a").Rows.Count.ToString)

DataGrid1.ItemsSource = ds.Tables("a").AsEnumerable.ToList()
'DataGrid1.DataContext = ds.DefaultViewManager

con.Close()

这是XAML代码:

<Window x:Class="datagrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="datagrid" Height="344" Width="599">
    <Grid>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="486,225,0,0" Name="Button1" 
                VerticalAlignment="Top" Width="75" />
        <DataGrid Height="241" HorizontalAlignment="Left"
                  Margin="12,12,0,0" 
                  Name="DataGrid1" VerticalAlignment="Top"
                  Width="386" ItemsSource="{Binding ds}" />
    </Grid>
</Window>

如何解决这个问题?它如何动态地将数据集绑定到数据网格?

2 个答案:

答案 0 :(得分:2)

ItemsSourceDataView绑定,而不是DataTable。您可以使用以下任一方法获取DataView -

DataGrid1.ItemsSource = ds.Tables("a").DefaultView;

或使用扩展方法AsDataView -

DataGrid1.ItemsSource = ds.Tables("a").AsDataView();

答案 1 :(得分:0)

你有点混合动态和静态绑定。当你从后面的代码与ItemsSource进行通信时,你应该从XAML和ItemsSource="{Binding ds}"中移除DataGrid1.DataContext = ds.DefaultViewManager