如何在没有控件的情况下获得自动完成功能

问题描述:

如果向编辑控件提供字符串列表并设置自动填充模式和源,则会自动获取自动完成功能。我的问题是我可以在没有控制权的情况下在.NET中获得相同的功能。换句话说,我想是这样的:如何在没有控件的情况下获得自动完成功能

string[] ProgressivePartialMatch(string[] Strings, string MatchText) 

,所以我想在后面的字符串会在自动完成已经出现了,可以这么说。

您可以使用ajax从数据库中获取匹配的项目(jQuery将满足您的需求)。和简单的JavaScript(最好是jQuery)进行编辑控制。 问题是为什么你需要这个?

P.S.看看这个

jQuery Autocomplete and ASP.NET

+0

我不认为这是他想要的。他宁愿要一个返回符合模式的项目的函数。 – 2010-03-28 00:14:56

+0

@Lukasz正确我正在寻找基本上在数组上运行StartsWith,虽然我当然可以遍历数组,我想知道如果框架公开底层的自动完成算法,编辑控件使用,以某种方式 – Rahul 2010-03-28 00:54:35

如果它不存在,它很容易写自己

string[] ProgressivePartialMatch(string[] Strings, string MatchText) 
{ 
    return Strings.Where(s => s.StartsWith(MatchText)).ToArray(); 
} 
+0

这将工作,但对于大数据集来说它会非常慢,因为它必须经过所有的项目。 – 2010-03-28 00:24:28

+0

它不会太糟糕,排序字符串数组,而不是二进制搜索。它不需要通过所有的项目。 – Casey 2010-03-28 00:28:05

+0

是的,它可能在很大的列表上很慢,但是对于每个键入的字符它会变得越来越小。如果输入是一个排序数组,我可以进行二分搜索,但这不是规范的一部分。 – Gabe 2010-03-28 00:35:09

如果你想快速自动完成,你会想实现一个trie。您可以按照特定字符串查找以特定字符串开头的所有项目,直到“开始于”字符串结束。

+0

如果他想要查找包含MatchText的所有字符串,而不是仅仅以它为前缀? – Gabe 2010-03-28 00:38:56

+0

@gabe:没错,如果是这种情况,这个解决方案将不起作用。我猜这个问题的答案取决于提问者定义为自动完成的内容。 – 2010-03-28 00:46:21

+0

我认为刚开始是好的,编辑控件自动完成似乎是如何工作的,而不是包含 – Rahul 2010-03-28 00:52:30