2012-05-06 17 views
0

私はこれでナットを運転しています。AutoGenerateColumnsがfalseの場合、DataGridはDataGridに正しくバインドされません。

私はDataGridを持っています。インメモリにバインドしたいDataTableです。 AutoGenerateColumnsをtrueに設定すると、フィールドを編集して変更をデータテーブルに伝播させることができ、すべてが素晴らしいです。問題は、「ステータス」フィールドのドロップダウンコンボボックスを使用したかったことです。 AutoGenerateColumnsfalseに設定し、XAMLで列見出しを手動で追加しました。私がこれを行うと、もはやフィールドを編集することができなくなり、変更を持続させることができます。代わりに、各フィールドは空白になります。私はデバッグ中にDatagridカラムのステータスをチェックし、バインディングがnullとして読み取っていることがわかりました。私が間違っていたことのアイデア?

XAMLコード:

<DataGrid Margin="31,29,0,29" Name="dgTickets" RowEditEnding="dgTickets_RowEditEnding" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="ID #" x:Name="ID" /> 
      <DataGridTextColumn Header="Customer Name" x:Name="CustomerName" /> 
      <DataGridTextColumn Header="Phone #" x:Name="Phone"/> 
      <DataGridComboBoxColumn Header="Status" x:Name="Status"/> 
      <DataGridCheckBoxColumn Header="Bool?" x:Name="bool1"/> 
      <DataGridCheckBoxColumn Header="Bool?" x:Name="bool2"/> 
      <DataGridCheckBoxColumn Header="Bool?" x:Name="bool3"/> 
      <DataGridTextColumn Header="Notes" x:Name="Notes"/> 
     </DataGrid.Columns> 
    </DataGrid> 

のDataTableを作成し、それを関連付けるための私のC#コード:

//add columns 
     column = new DataColumn("ID", System.Type.GetType("System.String")); //two piece constructor - adds header string and data type 
     dbTable.Columns.Add(column); //adds the column to the table 

     column = new DataColumn("CustomerName", System.Type.GetType("System.String")); 
     dbTable.Columns.Add(column); 

     column = new DataColumn("Phone#", System.Type.GetType("System.String")); 
     dbTable.Columns.Add(column); 

     column = new DataColumn("Status", System.Type.GetType("System.String")); 

     dbTable.Columns.Add(column); 

     column = new DataColumn("bool1", System.Type.GetType("System.Boolean")); 
     dbTable.Columns.Add(column); 

     column = new DataColumn("bool2", System.Type.GetType("System.Boolean")); 
     dbTable.Columns.Add(column); 

     column = new DataColumn("bool3", System.Type.GetType("System.Boolean")); 
     dbTable.Columns.Add(column); 

     column = new DataColumn("Notes", System.Type.GetType("System.String")); 
     dbTable.Columns.Add(column); 
     //add rows 
     row = dbTable.NewRow(); 

     dbTable.Rows.Add(row); 

     dbTable.AcceptChanges(); 
     dgTickets.ItemsSource = dbTable.DefaultView; 

何かアドバイスが高く評価されています。私はこれらの2つの要素を連携させるためにいくつかの異なる方法を試しましたが、ヘッダーを手動で定義すると2つのバインドを正しく行うことができません。

答えて

1

は、私はあなただけ例えば、そこにバインディングをスローする必要があると思う:幻想的に働い

<DataGridTextColumn Header="Customer Name" x:Name="CustomerName" Binding={Binding path=CustomerName} /> 
+0

。私は間違いなく、その本を拾う必要があります。ありがとうございました! – ChargerIIC

関連する問題