使用组合框中的“包含”,列表无法正确过滤

时间:2019-10-29 10:04:27

标签: c#

我正在尝试提出一种解决方案,可以在组合框中搜索包含某些单词/短语的项目。我尝试使用“自动完成”文本框功能,但这仅搜索对我不利的第一个单词。

我遵循了https://social.msdn.microsoft.com/Forums/vstudio/en-US/4c229a73-cdad-4fa3-95db-97f9ff7810c1/autocomplete-match-on-contains-not-startswith?forum=netfxbcl

中提供的示例

我已经启动了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”,但仅得到以下结果

http://prntscr.com/ppkatd

例如,在数据库中,还有百威33cl和Keg百威(http://prntscr.com/ppkbu4),它们从第一个列表中获取。

我应该使用其他方法,而不是“包含”吗?

1 个答案:

答案 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;
}