-2

DbDataReader オブジェクトを返すモジュールがあります。これは、Windows.Forms の DataTable/DataGridView で試用され、信頼され、運用環境で使用されているモジュールであるため、変更したくありません。

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と同等のものは何ですか?

4

1 に答える 1

0

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

次の使用を提案する同様の投稿をいくつか見つけました。

DataTableExtensions.AsEnumerable(DataTable dt);

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

しかし、使用:

DataTableExtensions.AsDataView(DataTable dt);

DataTable を DataView クラスでラップします。これは WPF の DataGrid と互換性があります。

于 2016-05-12T06:18:47.250 に答える