Я сам себя обманывал, и я надеюсь, что мне просто не хватает чего-то очевидного.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;
Любые советы оценили. Я пробовал несколько разных способов, чтобы эти два элемента работали вместе, но я не могу заставить их правильно привязываться, если заголовки определены вручную.
Это работало сказочно. Мне определенно нужно подобрать книгу на эту тему. Спасибо! – ChargerIIC