C# 使用lambda填充DataGridView

C# 使用lambda填充DataGridView,c#,linq,datagridview,directoryservices,C#,Linq,Datagridview,Directoryservices,我在SearchResultCollection中有一个目录项列表。 比如: SearchResultCollection src = ds.FindAll(); 我需要像这样的东西: dgvItems.datasource = [... something ... ] 现在,我正在使用foreach遍历集合,并将一行插入到DataGridView,如下所示: DataTable dt = new DataTable(); dgvItems.datasource = dt; foreach

我在
SearchResultCollection
中有一个目录项列表。 比如:

SearchResultCollection src = ds.FindAll();
我需要像这样的东西:

dgvItems.datasource = [... something ... ]
现在,我正在使用foreach遍历集合,并将一行插入到
DataGridView
,如下所示:

DataTable dt = new DataTable();
dgvItems.datasource = dt;
foreach (SearchResult sr in src)
{    
.
.
dt.rows.add(sAMAccountName, sn, givenName);
}

这是一个缓慢的过程,因为src在一个大表中。有没有一种方法可以使用lambdaslinq来加快速度?

linq肯定不会加快代码的速度。无论您是否使用lambdas/LINQ,最终结果都是一样的:这些项被逐个添加到DataGridView中

我怀疑这种缓慢的行为可能是因为每次添加项目时,DataGridView对象都会执行一些昂贵的UI操作(例如,重新绘制自身,计算滚动条的位置)

如果这是导致问题的原因,请尝试在添加项之前隐藏DataGridView,并在添加所有项后使其再次可见

或者,您可以尝试提前准备DataTable,并在所有数据准备就绪后将其分配给DataGridView的DataSource属性


希望这会有所帮助。

LINQ不会加快代码的速度,事实上,它可能会减慢代码的速度,因为它有更多的开销。它执行的循环与您当前执行的几乎相同。您可能希望在虚拟模式下运行DGV:@Peter您确定这个问题是关于asp.net的吗?op使用datagridview标记,并在问题中提到winform控件。您的回答和编辑似乎不正确。@DavidHall-。。。呜呜声。不知道我在想什么。。。谢谢你抓住了!我不知道什么是
SearchResultCollection
,但它可能足够做
dgvItems.datasource=src