Почему я не могу привязать WPFToolkit DataGrid ItemSource к DataTable?

В элементе управления Telerik мне удалось связать DataTable напрямую с ItemSource, но когда я переключился на Codeplex WPFToolkit Datagrid:

<dg:DataGrid Name="theGrid"/>
---
theGrid.ItemsSource = dt;

Я получаю эту ошибку:

Cannot implicitly convert type 'System.Data.DataTable' to 'System.Collections.IEnumerable'.

Как привязать DataTable к WPFToolkit DataGrid?


person Edward Tanguay    schedule 02.02.2009    source источник


Ответы (4)


Вам нужно будет спроецировать свой datatable во что-то, что реализует IEnumerable, как это ожидает DataGrid. Сетка — это реализация, отличная от версии Telerik, поэтому трудно ожидать одинаковой функциональности от обеих.

person Ray Booysen    schedule 02.02.2009
comment
Это сработало, на самом деле я конвертировал из List‹Contact› в Datatable для элемента управления Telerik, так что это еще проще, теперь я просто использую исходный объект List‹Contact›, спасибо. - person Edward Tanguay; 02.02.2009

Я считаю, что самый простой способ:

myDataGrid.ItemsSource = myDataTable.DefaultView;

потому что DefaultView реализует IEnumerable

person viggity    schedule 03.02.2009
comment
+1, привязка к DataView проста и отлично работает, особенно если вы хотите иметь возможность перемещаться по отношениям. - person Oskar; 04.06.2009

Я предполагаю, что поддержка этого будет добавлена ​​в будущем, но сейчас вы можете использовать реализацию IListSource на DataTable. Вызовите метод GetList() и используйте его в качестве источника данных. Это явная реализация интерфейса, поэтому вам нужно выполнить приведение:

var data = (myDataTable as IListSource).GetList();
person Kent Boogaart    schedule 02.02.2009
comment
Я нашел это: msdn.microsoft.com/en-us /library/aa325664(VS.71).aspx, но как использовать реализацию IListSource для DataTable для вызова метода GetList()? - person Edward Tanguay; 02.02.2009

В таких случаях я привязываю ItemsSource к DataContex в XAML, т.е.

ItemsSource={Binding} 

а затем в коде я делаю

theGrid.DataContext = dt

Это поможет.

person accessD    schedule 23.12.2010