При использовании DataTable и DataGrid в WPF System.Windows.Data возникает ошибка - PullRequest
3 голосов
/ 18 ноября 2010

Я использую DataGrid из WPFToolkit для отображения некоторых данных.

DataTable инициализируется в myfile.xaml.cs с

myTable = new DataTable();
DataColumn col;
col = new DataColumn();
col.DataType = System.Type.GetType("System.Int64");
col.ColumnName = "ID";
col.ReadOnly = true;
col.Unique = false;
myTable.Columns.Add(col);

col = new DataColumn();
col.DataType = System.Type.GetType("System.String");
col.ColumnName = "Name";
col.ReadOnly = true;
col.Unique = false;
myTable.Columns.Add(col);

и т. Д.

Как предлагается здесь, я использую

myGrid.ItemsSource = myTable.DefaultView;

в myfile.xaml.cs.

В myfile.xaml я определил только

<my:DataGrid Name="myGrid" xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"/>

Когда я добавляю запись в таблицу с помощью

DataRow row = myTable.NewRow();
row["ID"] = 123;
row["Name"] = "MyName";

Action action = () => myTable.Rows.Add(row);
Dispatcher.Invoke(action);

, запись добавляется правильно к сетке в графическом интерфейсе, однако я получаю следующую ошибку:

System.Windows.Data Error: 39 : BindingExpression path error: 'ID' property not found on 'object' ''Object' (HashCode=29890231)'. BindingExpression:Path=ID; DataItem='Object' (HashCode=29890231); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
System.Windows.Data Error: 39 : BindingExpression path error: 'Name' property not found on 'object' ''Object' (HashCode=29890231)'. BindingExpression:Path=Name; DataItem='Object' (HashCode=29890231); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

Так как я могу исправить эту ошибку?Есть намеки?

Спасибо.

1 Ответ

0 голосов
/ 18 ноября 2010

Я думаю, что это как-то связано с порядком выполнения кода.Попробуйте изменить это:

DataRow row = myTable.NewRow();
row["ID"] = 123;
row["Name"] = "MyName";

Action action = () => myTable.Rows.Add(row);
Dispatcher.Invoke(action);

на это:

DataRow row = myTable.NewRow();
myTable.Rows.Add(row);
row["ID"] = 123;
row["Name"] = "MyName";

т.е. добавьте свою строку в таблицу данных ДО того, как вы добавите элементы в строку

...