我正在尝试向文本框添加自动完成功能,结果来自数据库.它们的格式为
[001]最后,第一中间
目前,您必须输入[001] ...才能显示要显示的条目.所以问题是我希望它完成,即使我先键入firstname.所以,如果一个条目是
[001] Smith,John D.
如果我开始输入John,则此条目应显示在自动完成的结果中.
目前代码看起来像
AutoCompleteStringCollection acsc = new AutoCompleteStringCollection();
txtBox1.AutoCompleteCustomSource = acsc;
txtBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
txtBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
....
if (results.Rows.Count > 0)
for (int i = 0; i < results.Rows.Count && i < 10; i++)
{
row = results.Rows[i];
acsc.Add(row["Details"].ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
results是包含查询结果的数据集
查询是使用like语句的简单搜索查询.如果我们不使用自动完成并将结果抛入数组,则会返回正确的结果.
有什么建议?
编辑:
这是返回结果的查询
SELECT Name from view_customers where Details LIKE '{0}'
Run Code Online (Sandbox Code Playgroud)
{0}是搜索字符串的占位符.
我正在尝试修改Windows.Forms ComboBox的行为,以便AutoComplete下拉列表根据我指定的规则显示项目.
默认情况下,如果您在ComboBox中使用自动完成,则遵循的规则是"如果(s.StartsWith(userEnteredTextInTheComboBox))下拉列表中包含字符串s"我真正感兴趣的是将新规则替换为当前一,但我找不到任何办法.(具体来说,我更喜欢s.Contains而不是s.StartsWith.)
我可以使用两个控件而不是一个控制器将一个笨拙的解决方案整合在一起,但是我真的很高兴实际上做了我想做的事情.
更新:经过一些搜索,我发现了基本相同的问题.在那里提供的答案表明,使用两个控件"伪造它"是要走的路.