【发布时间】:2018-03-02 14:56:06
【问题描述】:
我在 DataTable 上有一个 DataView(带有排序列,没有 RowFilter)。当我调用DataView.FindRows(SortCols[]) 时,它返回DataRowView[]。
将此数组绑定到 DataGridView 的最有效方法是什么(就速度而言)?
我的谷歌搜索只返回了几个相关的结果,他们似乎建议遍历数组并将数据添加到新的 DataTable,然后可以绑定。
我希望我的 DataRowView[] 至少包含几百个项目,所以我不想采用迭代方式,除非没有更好的可用。
任何建议将不胜感激。非常感谢。
【问题讨论】:
-
我通常执行以下操作:datagridview1.DataSource = dt;或者如果 fileter create new DataTable dt1 = dt.AsEnumerable().Where(x => x.Field
("Col_A") == "ABC").CopyToDataTable(); -
这对我来说不好。
-
使用 AsEnumerable() 非常快,可以测试一下性能。缓慢的部分是刷新 DGV 控制。您必须小心确保只刷新 DGV 一次。
-
我明白你在说什么。但我使用 DataView 的原因是它是在 DataTable 的多个列上创建索引的唯一方法,然后 FindRows() 有效地利用了相应的索引。我想坚持这一点,而不是使用 Linq。我面临的唯一困难是 FindRows 返回一个 DataRowView 数组,它不能直接绑定到 DataGridView,因此这个问题。
-
您可以随时向 DataTable 添加新列并添加索引号。按照您的方式,您仍然必须将行数组放入数据表中。