2010-08-23 3 views
4

У меня есть тип данных AVT типа AvailDataTable. Следующий код работает, чтобы создать новый DataTable из АВТ:Невозможно лить объект типа 'system.data.datatable' на тип

AvailDataTable AVT1 = (AvailDataTable) AVT.DefaultView.Table; 

Однако код:

AvailDataTable AVT1 = (AvailDataTable) AVT.DefaultView.ToTable(); 

терпит неудачу с сообщением «Не удается привести объект типа„system.data.datatable“в типа 'AvailDataTable.

Может кто-нибудь объяснить, почему первые литые работает, но второй один не делает? Спасибо!

ответ

2

DataView.Table возвращает вам основной исходный объект DataTable, в йо Ур случае эта исходная таблица имеет тип AvailDataTable.

http://msdn.microsoft.com/en-us/library/system.data.dataview.table.aspx

В то время как DefaultView.ToTable создает новый экземпляр DataTable на основе строк в текущем виде.

Тонкое различие здесь, но ToTable возвращает вас общий DataTable объект не ваш конкретный тип DataTable

http://msdn.microsoft.com/en-us/library/a8ycds2f.aspx

+0

Спасибо, я думаю, я получаю это. Означает ли это, что мое первоначальное утверждение неверно, что в первом случае я не получаю «новый» datatable, просто ссылку на исходный datatable? И что второе приведение не работает, потому что представление, которое используется для создания нового datatable, может иметь не те же столбцы, что и исходный datatable? – dsteele

+0

Да и да. :) –

+0

Ура! Прогресс делается .. спокойно .. Спасибо. – dsteele

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