在VB.NET中搜索DataGridView的最佳方法?

时间:2009-11-19 16:10:35

标签: sql sql-server vb.net search

在我的表单上有一个数据网格视图,可能会上升到大约70,000个项目,具体取决于客户获得的扫描程度。我还有一个文本框,允许用户使用textchanged事件搜索datagridview。我正在使用带有like子句的select语句并填充数据集。我不认为这会削减它,因为当有大量记录时程序会挂起并变得迟钝。如果性能是首要任务,那么我能做到这一点的最佳方式是什么?

5 个答案:

答案 0 :(得分:2)

提高性能的显而易见的方法是单击按钮而不是经常调用的textchanged事件进行过滤。

如果你不想改变它的工作方式,另一种选择是在输入多个字符之前不开始搜索,然后等待至少x秒才开始另一次搜索。

答案 1 :(得分:1)

我发现的最好的方法是在另一个线程上实际运行SQL查询,将数据集存储在内存中,并让计时器每毫秒添加10条记录。这样UI仍然填满,但主处理器并不忙于绘制整个时间,您的用户仍然可以键入。这可以根据其运行的计算机进行放大和缩小。我已经使用Listboxes和组合框完成了这个,并且它相当简单(如果你使用委托和调用计数一样简单)。

这应该可以为您提供所需的性能......也就是说,如果您有足够的时间来实现它。

~~~~~~~~~~~~~~~~~~~~编辑~~~~~~~~~~~~~~~~~~~~

如果您愿意,我可以发布此列表框版本的示例代码,因为我实际上没有看到网络上的其他人这样做。

答案 2 :(得分:1)

为什么要返回所有记录?实现服务器端分页,因此一次只返回10/20/50/100(让用户决定)记录。

答案 3 :(得分:1)

如果您不担心所选记录的数量,只需下载整个数据集。

在填充的表格上创建数据视图对象。

设置DataGridView.DataSource =您的数据视图对象。

然后,不使用文本框的textchanged事件来填充数据集,而是使用它来更改数据视图上的.RowFilter属性。

答案 4 :(得分:1)

详细说明Meta-Knights答案:我遇到了一个与你类似的问题,并决定使用一个在用户输入密钥时启动的计时器。我把它设置为2秒,因为我的用户通常在打字时阅读信息。它似乎工作得很好,用户对自动搜索功能非常满意。

基本上伪代码如下:

Sub TextChanged()  
   MyTimer.Enabled= TextBox.TextLength > 0  
End Sub

Sub TimerTick()  
   MyTimer.Enabled=False  
   Lookup(TextBox.Text)  
   MyTimer.Enabled=True  
End Sub