-2

I have a module which returns DbDataReader objects. This is a module that is tried and trusted and in production use with DataTable/DataGridView in Windows.Forms, so I do not wish to change it.

I tried doing the same with WPF, passing a DataTable to ItemsSource, but that failed because it's expecting an IEnumerator that DataTable does not implement.

I remembered DbDataReader does implement that interface, and it occured to me that ItemsSource may be wanting to read data into an internal buffer, so I tried passing DbDataReader and it worked....until I completed the code with a finally clause!

Then I found that DataTableExtensions does allow me to get an enumerator from a DataTable. but it doesn't seem to be iterating the data!

Note that I DO NOT need to edit the data, and what I got from DbDataReader was fine, all I need is a copy of this data to be available for the grid...how can I do this, it must be simple!

Thanks for any help!

As requested, here is code;

This is basically the type of thing I'm used to doing with 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;

What's the equivalent with WPF?

  • It would be very useful if you included some code. But if I understood your problem, you can wrap your DbDataReader in some kind for VirutualizingCollection. Maybe this excellent work by PaulMcLean at [codeproject](http://www.codeproject.com/script/Membership/View.aspx?mid=1402727) – bamanow May 11 '16 at 20:27

1 Answers1

0

I resolved this in the end.

I had found several similar posts that suggested using:

DataTableExtensions.AsEnumerable(DataTable dt);

To get an enumerator interface for the DataTable, but this simply does not work.

But using:

DataTableExtensions.AsDataView(DataTable dt);

Wraps the DataTable with a DataView class, and this is compatible with WPF's DataGrid.