2011-10-28 99 views
0

我有一些問題,當我有一個數據表,我想要將datagrid中的每個datagridtextcolumn綁定到數據表中的每一列。Datagridtextcolumn綁定到數據表

我的代碼是如下

public class Packet 
{ 
    public Header header { get; set; } 
    public Frame frame { get; set; } 
    public Tail tail { get; set; } 
    public String id { get; set; } 

    public Packet(String id,Header header, Frame frame, Tail tail) 
    { 
     this.id = id; 
     this.header = header; 
     this.frame = frame; 
     this.tail = tail; 
    } 

} 

因此在我XAML側

<Grid > 
    <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=.}" Name="dgrid" SelectionChanged="dgrid_SelectionChanged"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ID" Binding="{Binding Path=id}"/> 
     </DataGrid.Columns> 

    </DataGrid> 
</Grid> 

而在我的碼側,ds是具有一個數據表中的數據集。每行是與報頭幀尾和id相對應的包4列。我試圖讓id先綁定正確。但是ID號碼不能顯示在數據網格上。

dgrid.DataContext = ds.Tables[0]; 

它實際上顯示正確的數據,如果我不使用xaml側的datagridtextcolumn。但是我想要的是將xaml一側的綁定綁定到數據表。

+0

這似乎沒有問題。你能看到關於在調試窗口中綁定的任何第一個異常嗎?或者你檢查了'ds.Tables [0]'的實例是否被正確初始化? –

+0

@edelweiss嘗試刪除datagrid上的綁定,然後在您的代碼中執行此操作。 –

+0

@jwJung當我運行它時,我在輸出窗口中看到了這個。 System.Windows.Data Error:40:BindingExpression path error:'id'property not found on'object'''DataRowView'(HashCode = 8381127)'。 BindingExpression:路徑= ID; DataItem ='DataRowView'(HashCode = 8381127);目標元素是'TextBlock'(Name ='');目標屬性是'文本'(類型'String')。這意味着它實際上沒有正確的綁定? – edelweiss

回答

0

試試這個

<Grid > 
     <DataGrid AutoGenerateColumns="False" Name="dgrid" SelectionChanged="dgrid_SelectionChanged"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ID" Binding="{Binding Path=id}"/> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 

    dgrid.ItemsSource = ds.Tables[0].AsDataView(); 
0

如果你的情況有一個像Packet一個模型類,那麼我會建議,而不是使用DataTable觀察的集合持有的Packets列表。 DataTable的產品是DataRowView

我甚至不確定您的DataTable如何持有Packet實例?

如果您ds.Tables [0] .Rows [0] Packet類型或ds.Tables [0] .Rows [0] [0]Packet類型的?

如果這樣會對綁定造成很大的麻煩。