我无法让我的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
有人能看出我做错了什么吗?
编辑:我能让它工作。可能不是最好的方法,但对我有用。我摧毁了数据网。并将其放在后台,介于dt.Load(rs)和设置数据上下文
之间 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"))})
实际上,你为AutoGeneratedColumn = false
做得对如果您想跳过数据库的某些列,您可以先通过设置隐藏所有列
Columns.Item(x).Visibility = Windows.Visibility.Hidden
,然后只显示选定的
要跳过行,您可以从DataView
中删除它们(如果您想这样做,最好创建单独的DataView
以供查看,并提供自定义数据收集方法)
另一种(更好的)禁用分隔行方法在这里描述