当我添加数据到XAML中的datagrid不更新

问题描述:

我无法让我的DataGrid填充数据。我是XAML的新手。我正在使用OracleDataReader对象,并希望将其添加到DataGrid。首先这里是XAML:当我添加数据到XAML中的datagrid不更新

<DataGrid Name="grdResults" FontSize="25" AutoGenerateColumns="False" CanUserResizeRows="False" DockPanel.Dock="Top" IsReadOnly="True"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=extName}" Header="Name" Width="*" /> 
     <DataGridTextColumn Binding="{Binding Path=location_note}" Header="Location" Width="*" /> 
     <DataGridTextColumn Binding="{Binding Path=crate_no}" Header="Crate" Width="*"/> 
    </DataGrid.Columns> 
</DataGrid> 

这里是幕后。似乎它应该工作,但事实并非如此。这些字段的名称与它们在XAML中绑定的名称相同。 RS是一个填充OracleDataReader

Dim dt As New DataTable 
dt.Load(rs) 
grdResults.DataContext = dt.DefaultView 

任何人都可以看到我做错了什么?

编辑:

我能得到它的工作。可能不是最好的方式,但为我工作。我掏出从XAML的datagrid.columns和孩子的,并把这个在dt.Load(RS)之间的幕后设置的datacontext

grdResults.Columns.Add(New DataGridTextColumn() With { _ 
     .Header = "Name", _ 
     .Binding = New Binding(String.Format("[{0}]", "extName"))}) 

    grdResults.Columns.Add(New DataGridTextColumn() With { _ 
     .Header = "Location", _ 
     .Binding = New Binding(String.Format("[{0}]", "location_note"))}) 

    grdResults.Columns.Add(New DataGridTextColumn() With { _ 
     .Header = "Crate", _ 
     .Binding = New Binding(String.Format("[{0}]", "crate_no"))}) 
+0

我完全不鼓励在WPF客户端使用'System.Data'类。创建一个适当的数据模型来保存数据和适当的ViewModel来定义应用程序逻辑。 – 2013-04-26 15:08:22

+0

但是,如果我有,它可以显示在网格中? – Loogawa 2013-04-26 15:10:44

+0

当然花花公子。 WPF比winforms更有能力。我不明白你的问题。 – 2013-04-26 15:18:02

其实,你没有正确的AutoGeneratedColumn = false 如果你想跳过数据库的某些列,您可以首先通过设置 Columns.Item(x).Visibility = Windows.Visibility.Hidden来隐藏所有这些列,然后仅显示选定的列。

要跳过行你可以从删除它们DataView(最好是查看创建单独的DataView,如果要做到这一点,并提供定制的数据采集方法)

的另一个(更好)的方式禁用单独的行描述here