设置DataGridView的过滤器确实很慢,但仅限于已部署的应用程序

时间:2017-10-31 16:21:46

标签: .net vb.net winforms datagridview

嘿伙计们,我有一个应用程序用于主要使用一些DataGridView可视化数据我使用设计器创建的数据集对象 datagrids自动绑定(使用一些生成的BindingSource对象),所以我只关心在我的初始化代码中填充基础表:

TableAdapter1.Fill(DataSet.Table1)
TableAdapter2.Fill(DataSet.Table2)

之后我为BindingSource对象设置了一个基本过滤器,以便在我打开应用程序时只显示最相关的数据,所以我在我的应用程序中有以下代码:

' Fill tables
' Link the filled data

Table1BindingSource.Filter = GetBaseFilterTable1()
Table2BindingSource.Filter = GetBaseFilterTable2()

现在过滤器非常简单,如果在我的开发环境中设置第一个过滤器,则使用中的几个位值进行过滤40ms (使用调试和发布编译规则)当我尝试部署我的应用程序并打开已部署的版本时,我会在 15秒内完成相同的指令 (我设法找到将调试器附加到已部署的可执行文件)

我真的无法解决这个问题你有些人已经陷入了这样的困境吗?

如果您需要更多信息,我会很高兴为您提供我所拥有的信息

编辑,我正在添加一些我认为可能相关且我已经忘记的信息,或者评论中不清楚的信息:

  • 使用点击一次部署应用程序。
  • 开发环境中使用的数据实际上与部署版本使用的数据相同
  • 测试全部在同一台电脑上运行:我的

1 个答案:

答案 0 :(得分:0)

我已尝试解决我的问题,我设法解决了这个问题,我在将数据表链接到datagridviews之前设置了Filter属性

所以它现在的代码是这样的:

TableAdapter1.Fill(DataSet.Table1)
TableAdapter2.Fill(DataSet.Table2)

Table1BindingSource.Filter = GetBaseFilterTable1()
Table2BindingSource.Filter = GetBaseFilterTable2()

' This was moved down after setting the Filter Property
Table1BindingSource.DataSource = DataSet.Table1
Table2BindingSource.DataSource = DataSet.Table2

而不是

TableAdapter1.Fill(DataSet.Table1)
TableAdapter2.Fill(DataSet.Table2)

Table1BindingSource.DataSource = DataSet.Table1
Table2BindingSource.DataSource = DataSet.Table2

Table1BindingSource.Filter = GetBaseFilterTable1()
Table2BindingSource.Filter = GetBaseFilterTable2()