当我在XAML中向datagrid添加数据时不会更新

时间:2013-04-26 15:06:45

标签: wpf vb.net xaml datagrid

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

<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和childs并把它放在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"))})

1 个答案:

答案 0 :(得分:2)

实际上,你确实适合AutoGeneratedColumn = false 如果要跳过数据库的某些列,可以先通过设置隐藏所有列 Columns.Item(x).Visibility = Windows.Visibility.Hidden,然后只显示选定的内容。

要跳过行,您只需将其从DataView中移除(如果您愿意,最好创建单独的DataView进行查看,并提供自定义数据收集方法)

另一种(更好的)禁用单独行的方法是here