2013-04-26 50 views
0

我無法讓我的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

回答

2

其實,你沒有正確的AutoGeneratedColumn = false 如果你想跳過數據庫的某些列,您可以首先通過設置 Columns.Item(x).Visibility = Windows.Visibility.Hidden來隱藏所有這些列,然後僅顯示選定的列。

要跳過行你可以從刪除它們DataView(最好是查看創建單獨的DataView,如果要做到這一點,並提供定製的數據採集方法)

的另一個(更好)的方式禁用單獨的行描述here

相關問題