【发布时间】:2015-06-25 10:58:18
【问题描述】:
我有一个包含 10000 多行的 DataTable,由 SQL Server 查询产生。 DataTable 用作 DataGridView 的 DataSource,如下所示(简化代码):
MyBindingSource = New BindingSource(MyDataTable, Nothing)
MyDataGridView.DataSource = MyBindingSource
由于加载需要很长时间,我想以某种方式限制 DataGridView 中显示的行数。
我不能在查询中使用TOP,因为我需要DataTable 中存在的所有数据以供以后过滤,而无需重新设置DataSource (MyBindingSource.Filter = MyFilter)。
另外,我不能使用Filter 属性来限制行数,因为查询结果中没有我可以使用的相关数据。为了解决这个问题,我曾考虑将 TSQL 的 ROW_NUMBER 添加到查询结果 (MyBindingSource.Filter = "[RowNumberField] < 100") 中,但这只有在过滤器中没有使用其他字段时才有效。
有什么想法吗?
【问题讨论】:
-
我在寻找解决方案时看到了那篇文章,但对于这样一个看似简单的任务来说,它似乎有很多模糊......
-
你确定“瓶颈”是
datagridview而不是你的SQL查询? -
@Fabio 有一个关于扩展的观点,最终您将在客户端上提取太多记录。尽管该操作比显示网格要快得多。您可以以只读方式拉取表,创建 DataView,添加过滤器,然后将其附加到 DGV。您可能想要搜索“DatagridView Paging” - 不要与作为 ASP Web 控件的 DataGrid 混淆。
-
查询只需要几秒钟,在DataGridView中显示数据需要更长的时间。当然,这取决于查询返回多少条记录。但我会看看分页。
标签: c# .net vb.net winforms datagridview