Поиск по DisplayMember в ListBox - PullRequest
       7

Поиск по DisplayMember в ListBox

0 голосов
/ 04 сентября 2018

У меня есть ListBox, который я заполняю так:

var dtCustomers = db.GetTableBySQL(query).AsEnumerable().Select(rows => 
    new CustomersModel
    {
        Name = rows.Field<string>("Name"),
        ProjectKey = rows.Field<int>("ProjectKey")
    });

lstCustomers.DataSource = dtCustomers.ToList();
lstCustomers.DisplayMember = "Name";
lstCustomers.ValueMember = "ProjectKey";
lstCustomers.ClearSelected();

Теперь я хочу создать TextBox с кнопкой поиска, чтобы заглянуть в этот список и выполнить поиск по элементу, выбранному как:

private void btnSearch_Click(object sender, EventArgs e)
{
    lstCustomers.SelectedItems.Clear();

    for (int i = lstCustomers.Items.Count - 1; i >= 0; i--)
    {
        if (lstCustomers.Items[i].ToString().ToLower().Contains(txtSearch.Text.ToLower()))
        {
            lstCustomers.SetSelected(i, true);
        }
    }

    lblitems.Text = lstCustomers.SelectedItems.Count.ToString() + "items found";
}

Проблема в том, что он никогда ничего не находит. Я думаю, что это потому, что он сравнивается по ValueMember вместо DisplayMember. Могу ли я искать в списке по DisplayMember?

1 Ответ

0 голосов
/ 04 сентября 2018

Для этого вы можете использовать сопоставление с шаблоном, поскольку базовыми элементами будут ваши CustomersModel:

private void btnSearch_Click(object sender, EventArgs e)
{
    lstCustomers.SelectedItems.Clear();

    int matchCount = 0;
    for (int i = lstCustomers.Items.Count - 1; i >= 0; i--)
    {
        if (lstCustomers.Items[i] is CustomersModel customer &&
            customer.Name.IndexOf(txtSearch.Text, StringComparison.OrdinalIgnoreCase) > -1)
        {
            matchCount++;
            lstCustomers.SetSelected(i, true);
        }         
    }

    lblItems.Text =  $"{matchCount} item{(matchCount > 1 ? "s" : "")} found";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...