2012-05-06 4 views
0

Я сам себя обманывал, и я надеюсь, что мне просто не хватает чего-то очевидного.DataGrid не привязывается к DataGrid должным образом, если AutoGenerateColumns ложно

У меня есть DataGrid Я хочу привязать к памяти DataTable. Если для параметра AutoGenerateColumns установлено значение true, я могу редактировать поля и распространять изменения в datatable, и все отлично. Проблема в том, что я хотел иметь выпадающее поле со списком для поля «Статус». Затем я установил AutoGenerateColumns в false и вручную добавил заголовки столбцов в 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> 

Мой C# код для создания DataTable и связывая его:

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

Любые советы оценили. Я пробовал несколько разных способов, чтобы эти два элемента работали вместе, но я не могу заставить их правильно привязываться, если заголовки определены вручную.

ответ

1

Я думаю, вам просто нужно бросить привязки там, например:

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

Это работало сказочно. Мне определенно нужно подобрать книгу на эту тему. Спасибо! – ChargerIIC

Смежные вопросы