在一个文本框中的两列上过滤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中有两个人具有相同的名字时,它只在用户键入它时显示第一个。
任何帮助修改我的代码将非常感激。谢谢!
您可以简单地这样做:
dataGridViewPerson.DataSource = listPerson.ToList().Where(x => (x.name + " " + x.surname)
.Contains(textBoxSearch.Text)).ToList();