获得一个由 C# 支持的 ASP.NET 站点。这是一个内部页面,列出了我们的虚拟机所在的物理服务器。该列表很长,所以我想要的是能够在用户键入文本框时过滤列表。例如,假设我们有三个名为“texas”、“newyork”和“nevada”的服务器。如果用户在指定的文本框中键入字母“n”,则列表(最好是客户端,没有回发)将从列表中删除 texas。此外,当用户输入“nev”时,newyork 也被过滤掉,只剩下“nevada”。
我认为默认的 GridView 不存在这种功能。至少,无论如何我找不到任何关于它的信息,不是网络表单。
我能想到的另一种“嗯,我想它行得通”的解决方案,因为它是一个内部站点,并且该页面最多可能每周使用几次,是在文本输入时回发,然后抛出针对数据库部分输入的字符串,并根据返回的结果重新绑定(bind)表。因此,当我们输入“nev”时,我们已经进行了 3 次回发和 3 次数据库查询。我相当确定这很容易实现,并且由于它是一个完全内部网站,具有基本的甚至没有安全需求,只有少数人使用,我不需要担心有人只是敲击键盘故意尝试并调用服务器十亿次。我意识到这在真实的开放世界场景中是一个可怕的想法,但对于我们的需求,我认为这不是问题。
我愿意接受任何一种可以帮助我实现相同效果的解决方案,即使它不是 GridView。
最佳答案
我刚刚在 Rx(响应式扩展)中看到一个这样做的例子。它使用 .Throttle() 来防止它在每次按键时发布。因此,您最多可以限制每秒更新一次或经常更新一次。完整示例是本 PDF 教程第 18 页的练习 5,http://go.microsoft.com/fwlink/?LinkId=208528 . ( Rx home page )
这里复制和粘贴太多了,但是教程有完整的例子。它的要点是每个按键都被处理为一个“序列”。然后序列中的每个项目都由一个事件处理。在您的情况下,对每次更改执行的操作将根据文本框的当前值过滤 GridView(Throttle() 再次将是防止快速打字者过于频繁地更新它的关键。
就每次回发而言,我会在这种情况下使用 AJAX.NET 来创建更流畅的 UI。 AJAX 可以回发到服务器以获取新数据等,但无需用户刷新整个页面。这将是理想的。有一些简单的 AJAX.NET 教程。只有几个 UI 控件,因此很快就能上手。
编辑:如果使用 ajax.net 的迷你回发速度不够快,则 rx 也可以使用客户端 javascript。 http://channel9.msdn.com/Blogs/Charles/Introducing-RxJS-Reactive-Extensions-for-JavaScript
关于c# - 有什么方法可以通过文本输入即时过滤 GridView 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9495299/