2016-05-11 10 views
-2

DbDataReaderオブジェクトを返すモジュールがあります。これは、Windows.FormsのDataTable/DataGridViewで実証され信頼されており、本番運用で使用されているモジュールなので、変更したくありません。DataGridへのDbDataReader WPF

DataTableをItemsSourceに渡してもWPFと同じことを試みましたが、DataTableが実装していないIEnumeratorが必要であるために失敗しました。

DbDataReaderがそのインターフェイスを実装していると思い、ItemsSourceが内部バッファにデータを読み込もうとしている可能性があるため、DbDataReaderを渡してみました。句!

次に、DataTableExtensionsによってDataTableから列挙子を取得できることがわかりました。データを反復処理しているようには見えません!

私はデータを編集する必要はなく、DbDataReaderから入手したものは問題ありませんでした。必要なのはグリッド用にこのデータのコピーです。これを行うにはどうすればよいですかシンプルに!

ありがとうございました!

リクエストに応じて、ここにコードがあります。

これは基本的に私は、Windowsフォームでやってる事に使用のタイプである:

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

WPFとなるものは何ですか?

+0

いくつかのコードを組み込むと非常に便利です。しかし、私があなたの問題を理解すれば、VirutualizingCollectionのためにDbDataReaderを何らかの形でラップすることができます。おそらく、[codeproject](http://www.codeproject.com/script/Membership/View.aspx?mid=1402727)のPaulMcLeanによるこの素晴らしい作品は、 – bamanow

答えて

0

私はこれを最後に解決しました。

私が使用して提案し、いくつかの同様の記事発見した:

DataTableExtensions.AsEnumerable(DataTable dt); 

をDataTableのための列挙子インターフェイスを取得するには、これは単に動作しません。

しかし、使用して:のDataViewクラスと

DataTableExtensions.AsDataView(DataTable dt); 

ラップのDataTable、これはWPFのデータグリッドと互換性があります。