【发布时间】:2010-11-16 22:17:42
【问题描述】:
我正在用一个 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 秒左右...
这对于大多数开发人员来说可能非常简单,但我是新手。
谢谢!
【问题讨论】:
-
实际上,您首先选择数据库中包含用户输入的所有名称,然后才获取前 30 个结果。但是您的数据库已完全处理!您应该在找到第 30 个结果后立即停止查询。我不太了解 LINQ 或 SQL,无法回答,但如果您这样做,解决方案应该很容易。
-
p 是字符串还是填充对象?有时,如果您返回多个对象,则会显着减慢加载时间,因为它必须填充每个对象。
-
这是一个对象,但没有什么花哨的,只是名字、出生日期、电话号码等。
标签: c# winforms linq algorithm