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.