2011-10-28 2 views
0

データテーブルを持っていて、データテーブルの各カラムにデータグリッド内の各datagridtextcolumnをバインドしたいと思っています。Datagridtextcolumnはデータテーブルにバインドします

私のコードは私の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> 

そして、私のコード側によって

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; 
    } 

} 

以下の通りである、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エラー:40:BindingExpressionパスエラー: 'id'プロパティが 'object' '' DataRowView '(HashCode = 8381127)'に見つかりません。 BindingExpression:Path = id; DataItem = 'DataRowView'(HashCode = 8381127);ターゲット要素は 'TextBlock'(Name = '')です。 targetプロパティは 'Text'(型 'String')です。つまり、それは実際に正しく結びついていないのですか? – edelweiss

答えて

0

は、あなたがあなたのケースでPacketのようなモデルクラスを持っている場合は、私はPacketsのリストを保持する代わりにDataTableの観察可能なコレクションを使用することをお勧めこの

<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

を試してみてください。 DataTableの商品はDataRowViewです。

DataTableさんはPacketインスタンスを持っていますか?

あなたds.Tables場合は[0] .Rowsを[0] Packetタイプまたはds.Tables [0] .Rows [0] [0]Packet型ですか?

もしそうなら、それはバインディングに多くの問題を引き起こすでしょう。

関連する問題