-2

我有一个返回 DbDataReader 对象的模块。这是一个在 Windows.Forms 中与 DataTable/DataGridView 一起经过尝试和信任并在生产中使用的模块,因此我不想更改它。

我尝试对 WPF 执行相同的操作,将 DataTable 传递给 ItemsSource,但失败了,因为它期望 DataTable 未实现的 IEnumerator。

我记得 DbDataReader 确实实现了该接口,我突然想到 ItemsSource 可能想要将数据读入内部缓冲区,所以我尝试传递 DbDataReader 并且它起作用了......直到我用 finally 子句完成了代码!

然后我发现 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);

用 DataView 类包装 DataTable,这与 WPF 的 DataGrid 兼容。

于 2016-05-12T06:18:47.250 回答