我有一个返回DbDataReader对象的模块。这是一个经过尝试和信任的模块,并且在Windows.Forms中使用DataTable / DataGridView进行生产,因此我不想更改它。
我尝试对WPF做同样的事情,将DataTable传递给ItemsSource,但是因为它期待一个IETumerator没有实现DataTable而失败了。
我记得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等效的是什么?
答案 0 :(得分:0)
我最终解决了这个问题。
我找到了几个类似的帖子建议使用:
DataTableExtensions.AsEnumerable(DataTable dt);
获取DataTable的枚举器接口,但这根本不起作用。
但是使用:
DataTableExtensions.AsDataView(DataTable dt);
使用DataView类包装DataTable,这与WPF的DataGrid兼容。