在一个文本框中的两列上过滤DataGridView

本文关键字:两列 过滤 DataGridView 一个 文本 | 更新日期: 2023-09-27 18:14:09

我正在处理一些我从WebService列表中获得的数据,并在DataGridView中呈现它。DataGridView包含4列:ID、Name、姓和Permissions。我想在一个textbox_TextChanged事件中过滤DataGridView元素。

关键是按名字搜索,然后当它找到全名时,用户输入空格,然后按与名字匹配的姓氏搜索。

我目前所做的代码:

 private void textBoxSearch_TextChanged(object sender, EventArgs e)
    {
        newList.Clear();
        newlist2.Clear();
        search = textBoxSzukaj.Text;
        try
        {
            foreach (localhost.Person item in listPerson.ToList())
            {
                if (item.name.Contains(search))
                {
                    newList.Add(item);
                    dataGridViewOsob.DataSource = search == "" ? listPerson : newList;
                    if (search.Length == item.name.Length)
                    {
                        name = search;
                        abc = name + " ";
                        searchBySurname = true;
                    }
                    else
                    {
                        searchBySurname = false;
                    }
                }
                else
                {
                   //dataGridViewPerson.DataSource = null;
                }
            }
            if (searchBySurname == true)
            {
                if (search.Length > abc.Length)
                {
                    searchBySurname = textBoxSearch.Text;
                    searchBySurname = search.Remove(0, abc.Length);
                    foreach (localhost.Person itemm in listPerson.ToList())
                    {
                        if (itemm.name == name)
                        {
                            if (itemm.surname.Contains(searchNazwisko))
                            {
                                if (searchNazwisko.Length > 0)
                                {
                                    newList.Clear();
                                    newlist2.Add(itemm);
                                    dataGridViewPerson.DataSource = search == "" ? listPerson : newlist2;
                                }
                                else
                                {
                                }
                            }
                            else
                            {
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

问题是当用户开始正确输入名称时,然后在某个时候他输入了错误的名称。在这种情况下,DataGridView将显示最后的正确匹配。

另一个问题是,当DataGridView中有两个人具有相同的名字时,它只在用户键入它时显示第一个。

任何帮助修改我的代码将非常感激。谢谢!

在一个文本框中的两列上过滤DataGridView

您可以简单地这样做:

dataGridViewPerson.DataSource = listPerson.ToList().Where(x => (x.name + " " + x.surname)
                                                   .Contains(textBoxSearch.Text)).ToList();