我在C#中有一个组合框,我想用它来使用自动完成建议,但是我希望能够在用户输入时更改自动完成条目,因为可能的有效条目太多而无法AutoCompleteStringCollection在启动时填充.
例如,假设我让用户输入名称.我有一个可能的名字列表("乔","约翰")和一个姓氏列表("博客","史密斯"),但如果我有一千个,那么这将是一百万个可能的字符串 - 太多,无法输入自动完成条目.所以最初我想只有名字作为建议("乔","约翰"),然后一旦用户键入了第一个名字("乔"),我想删除现有的自动完成条目并替换他们使用一个新的集合,包括所选的名字,然后是可能的姓氏("Joe Bloggs","Joe Smith").为此,我尝试了以下代码:
void InitializeComboBox()
{
ComboName.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
ComboName.AutoCompleteSource = AutoCompleteSource.CustomSource;
ComboName.AutoCompleteCustomSource = new AutoCompleteStringCollection();
ComboName.TextChanged += new EventHandler( ComboName_TextChanged );
}
void ComboName_TextChanged( object sender, EventArgs e )
{
string text = this.ComboName.Text;
string[] suggestions = GetNameSuggestions( text );
this.ComboQuery.AutoCompleteCustomSource.Clear();
this.ComboQuery.AutoCompleteCustomSource.AddRange( suggestions );
}
Run Code Online (Sandbox Code Playgroud)
但是,这不能正常工作.似乎对Clear()的调用导致自动完成机制"关闭",直到组合框中出现下一个字符,但是当下一个字符出现时,上面的代码再次调用Clear(),所以用户从不实际上看到了自动完成功能.它还会导致组合框的全部内容被选中,因此在每个按键之间您必须取消选择现有文本,这使其无法使用.如果我删除对Clear()的调用,则自动完成有效,但似乎AddRange()调用无效,因为我添加的新建议未出现在自动完成下拉列表中.
我一直在寻找解决方案,并看到了各种建议,但我无法使其中任何一个工作 - 自动完成功能显示为禁用,或新的字符串不显示.这是我尝试的一系列事项:
BeginUpdate()在更改字符串之前调用,EndUpdate()之后调用.Remove()所有现有字符串而不是Clear().AutoCompleteMode我更改字符串时将设置为"无",然后将其设置回"SuggestAppend".TextUpdate或KeyPress事件而不是TextChanged.AutoCompleteCustomSource用新的替换现有的AutoCompleteStringCollection.即使在各种组合中,这些都没有帮助. …
我正在尝试向文本框添加自动完成功能,结果来自数据库.它们的格式为
[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}是搜索字符串的占位符.
我想让我的ComboBox项目建议并在其中包含某些内容时附加其项目,而不仅仅是通过StartsWith函数.
我的ComboBox绑定到一个DataView,它包含长连接中的客户端[ CompanyName ],[ Address ],[ City ].
我希望我的用户能够在城市中输入并仍然找到与上述所有字段匹配的记录.我知道Infragistics可以实现这一点,但我没有这个包.
搜索词:" Sher "
这可能在VB.Net中还是我应该搜索其他内容?