繁体   English   中英

文本框自动完成 - Winform + LINQ

[英]Textbox Auto Complete - Winform + LINQ

我正在使用一个dataGrid和一个TextBox构建一个简单的win窗体应用程序。 我有大约1万条名字的记录。

我想要做的是实现某种自动完成功能,因此当用户键入文本框时,数据网格会更新以相应地显示匹配。

只是为了进行测试,我有一个DataContext对象返回名称表,并将一些代码放在textBox1_TextChanged事件中,以重置数据源。

this.dataGrid1.DataSource = (from p in connectionWrapper.getConnectionObj.PatientsNormalizeds where p.Name.Contains(textBox1.Text) select p).Take(30);

这在本地连接上运行良好,但是当从远程SQL服务器上提取数据时,这当然太慢,键入变得迟缓并且对用户来说是不可接受的。

只是想知道是否可以通过更改设计来完成任何事情。 我当然可以将整个表加载到form_loading中的列表或DataTable中并对其进行搜索,但这会导致表单停止响应3秒左右......

这对大多数开发人员来说可能非常简单,但我很新。

谢谢!

我想到了几种方法。 第一个不涉及过滤每个按键,而是搜索用户暂停时,即他们认为他们输入的内容足够,并希望看到返回的内容。 这可以通过使用计时器来完成,在该计时器中,每次按键都会重置延迟。

使用后台线程运行查询可使接口在检索数据时响应。

我还要看看从LINQ返回最小对象,即只是p.Name而不是整个p对象。 这也将有助于加快数据传输和响应速度。

您可以使用Reactive Extensions轻松实现一个解决方案,该解决方案非常容易地在用户键入了一定数量的符号(暂停了一段时间)后查询远程服务器。 以下实验室就是这样做的: Rx .NET HOL

您应该在后台线程aka BackgroundWorker上运行select

您可以在XML文件或其他东西中本地缓存数据。 应用程序可能第一次没有响应(除非您正在使用线程在后台预加载数据),但是对于其他每一次运行应用程序的应用程序,它的响应速度确实会很快。
您可以实现预加载/启动屏幕以通知用户数据在后台加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM