2016-05-11 11 views
-2

Ich habe ein Modul, das DbDataReader-Objekte zurückgibt. Dies ist ein Modul, das versucht und vertrauenswürdig ist und in der Produktion mit DataTable/DataGridView in Windows.Forms verwendet wird, also möchte ich es nicht ändern.DbDataReader zu DataGrid WPF

Ich habe versucht, dasselbe mit WPF zu tun, indem ich eine DataTable an ItemsSource übergebe, aber das ist fehlgeschlagen, weil es einen IEnumerator erwartet, den DataTable nicht implementiert.

Ich erinnerte mich DbDataReader implementiert diese Schnittstelle, und es trat mir auf, dass ItemsSource Daten in einen internen Puffer lesen möchte, also versuchte ich, DbDataReader übergeben und es funktioniert .... bis ich den Code mit einem schließlich abgeschlossen Klausel!

Dann fand ich, dass DataTableExtensions mir erlaubt, einen Enumerator von einer DataTable zu bekommen. aber es scheint nicht die Daten zu iterieren!

Beachten Sie, dass ich nicht die Daten bearbeiten muss, und was ich von DbDataReader bekam, war in Ordnung, alles, was ich brauche, ist eine Kopie dieser Daten für das Raster verfügbar sein ... wie kann ich das tun, muss es Sei einfach!

Danke für jede Hilfe!

Wie angefordert, hier ist Code;

Dies ist im Grunde die Art der Sache, die ich bin es gewohnt, mit Windows Forms zu tun:

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

Was das Äquivalent mit WPF ist?

+0

Es wäre sehr nützlich, wenn Sie etwas Code enthalten. Aber wenn ich Ihr Problem verstanden habe, können Sie Ihren DbDataReader auf irgendeine Art für VirutualizingCollection einpacken. Vielleicht diese ausgezeichnete Arbeit von PaulMcLean bei [codeproject] (http://www.codeproject.com/script/Membership/View.aspx?mid=1402727) – bamanow

Antwort

0

Ich löste dies am Ende.

ich mehrere ähnliche Einträge gefunden hatte, die unter Verwendung vorgeschlagen:

DataTableExtensions.AsEnumerable(DataTable dt); 

Um einen Enumerator-Schnittstelle für die Datentabelle, aber dies einfach nicht funktioniert.

Aber mit:

DataTableExtensions.AsDataView(DataTable dt); 

Wraps die Datatable mit einer Dataview-Klasse, und dies ist mit WPF Datagrid-kompatibel.