我正在尝试提出一种解决方案,可以在组合框中搜索包含某些单词/短语的项目。我尝试使用“自动完成”文本框功能,但这仅搜索对我不利的第一个单词。
中提供的示例我已经启动了2个列表
public List<string> listOnit = new List<string>();
public List<string> listNew = new List<string>();
然后我将数据加载到comboBox
if (rdr.HasRows == true)
{
// var source = new List<string>();
while (rdr.Read())
{
// myCollectionSales.Add(rdr[0].ToString());
listOnit.Add(rdr[0].ToString());
}
rdr.Close();
//textBox1.AutoCompleteCustomSource = myCollectionSales;
comboBox1.Items.AddRange(listOnit.ToArray());
}
并具有TextUpdate事件处理程序,以在文本更改后过滤列表
private void comboBox1_TextUpdate(object sender, EventArgs e)
{
comboBox1.Items.Clear();
listNew.Clear();
foreach (var item in listOnit)
{
if (item.Contains(this.comboBox1.Text))
{
listNew.Add(item);
}
}
comboBox1.Items.AddRange(listNew.ToArray());
comboBox1.SelectionStart = this.comboBox1.Text.Length;
Cursor = Cursors.Default;
comboBox1.DroppedDown = true;
}
我遇到一个问题,即搜索结果没有返回我期望的结果。例如,我搜索字符串“ Bud”,但仅得到以下结果
例如,在数据库中,还有百威33cl和Keg百威(http://prntscr.com/ppkbu4),它们从第一个列表中获取。
我应该使用其他方法,而不是“包含”吗?
答案 0 :(得分:0)
也许您使用的是其他情况?
尝试使用.ToLower():
private void comboBox1_TextUpdate(object sender, EventArgs e)
{
comboBox1.Items.Clear();
listNew.Clear();
foreach (var item in listOnit)
{
if (item.ToLower().Contains(this.comboBox1.Text.ToLower()))
{
listNew.Add(item);
}
}
comboBox1.Items.AddRange(listNew.ToArray());
comboBox1.SelectionStart = this.comboBox1.Text.Length;
Cursor = Cursors.Default;
comboBox1.DroppedDown = true;
}