DbDataReader для DataGrid WPF

У меня есть модуль, который возвращает объекты DbDataReader. Это проверенный и проверенный модуль, который используется в производстве с DataTable / DataGridView в Windows.Forms, поэтому я не хочу его менять.

Я попытался сделать то же самое с WPF, передав DataTable в ItemsSource, но это не удалось, потому что он ожидает IEnumerator, который DataTable не реализует.

Я вспомнил, что DbDataReader реализует этот интерфейс, и мне пришло в голову, что ItemsSource, возможно, хочет прочитать данные во внутренний буфер, поэтому я попытался передать DbDataReader, и это работало.... пока я не завершил код с предложением finally!

Затем я обнаружил, что DataTableExtensions позволяет мне получить перечислитель из DataTable. но это не похоже на итерацию данных!

Обратите внимание, что мне НЕ нужно редактировать данные, и то, что я получил от DbDataReader, было в порядке, все, что мне нужно, - это копия этих данных, которая будет доступна для сетки... как я могу это сделать, это должно быть просто!

Спасибо за любую помощь!

Как и просили, вот код;

Это в основном то, что я привык делать с Windows Forms:

DbDataReader dr=null;
DataTable dt=null;
try{
    dr = AModule.FetchData(Params....);  
    dt.Load(dr);                
}
finally{
    if(dr!=null)dr.Close();
}
dataGridView1.DataSource=dt;

Что эквивалентно с WPF?

1 ответ

Я решил это в конце.

Я нашел несколько похожих постов, в которых предлагалось использовать:

DataTableExtensions.AsEnumerable(DataTable dt);

Чтобы получить интерфейс перечислителя для DataTable, но это просто не работает.

Но используя:

DataTableExtensions.AsDataView(DataTable dt);

Обертывает DataTable с классом DataView, и это совместимо с DataGrid WPF.

Другие вопросы по тегам