c#从包含文本框文本的列表中查找字符串
c# Finding a string from a list that contains the text box text
我正在尝试在包含文本框文本的列表中搜索字符串。然后,当它找到记录时,将其添加到流程布局面板。它似乎没有正常工作。
我有 3 名员工:
- 理查德·雅各布斯
- 奥利维亚·穆拉奇克
- 杰斯·穆拉奇克
所有员工都添加到 EmployeeList。
GUI
当我在文本框中键入 'R' 时,只有 Richard 出现,这很好!但是当我输入 'Ri' 时,它并没有出现。另外,当我输入 'O' 或 'Olivia' 时,该员工也没有出现!
代码:
if (EmployeeTb.Text != string.Empty)
{
ResultsFLP.Controls.Clear();
foreach (Cerealto.Classes.Employee Employee in Cerealto.Classes.Employees.EmployeeList)
{
if (Employee.firstName.Contains(EmployeeTb.Text))
{
ESR = new EmployeeSearchResultUC(Employee.employeeID, Employee.firstName + " " + Employee.lastName);
ResultsFLP.Controls.Add(ESR);
}
}
}
else
{
ResultsFLP.Controls.Clear();
foreach (Cerealto.Classes.Employee Employee in Cerealto.Classes.Employees.EmployeeList)
{
ESR = new EmployeeSearchResultUC(Employee.employeeID, Employee.firstName + " " + Employee.lastName);
ResultsFLP.Controls.Add(ESR);
}
}
希望大家帮帮忙! :D
如果我正确理解了你的意图,
一个。你可以使用 Lambda expression 这几天学习这不是一个坏习惯。
b。请注意我对你逻辑的评论。
C。如果您想搜索而不考虑用户输入的是小写字母还是大写字母(会产生您在该问题中提出的问题),也可以使用 ToLower()
"Ri" 不是 "rI" 和 "RI" 不是 "ri" 等..
if (EmployeeTb.Text != string.Empty)
{
ResultsFLP.Controls.Clear();
var emp = Cerealto.Classes.Employees.EmployeeList.AsEnumerable().Where(x=> (x.firstName+ " " + x.lastName).ToLower().Contains(EmployeeTb.Text.ToString().ToLower().Trim())).Select(e=>e).ToList();
if(emp != null)
{
foreach(Cerealto.Classes.Employee Employee e in emp)
{
ESR = new EmployeeSearchResultUC(e.employeeID, e.firstName + " " + e.lastName);
ResultsFLP.Controls.Add(ESR);
}
}
}
else
{
// there is no results here clear everything or make no change (dont use the line ResultsFLP.Controls.Clear(); / load all employees again)
ResultsFLP.Controls.Clear();
}
我正在尝试在包含文本框文本的列表中搜索字符串。然后,当它找到记录时,将其添加到流程布局面板。它似乎没有正常工作。
我有 3 名员工:
- 理查德·雅各布斯
- 奥利维亚·穆拉奇克
- 杰斯·穆拉奇克
所有员工都添加到 EmployeeList。
GUI
当我在文本框中键入 'R' 时,只有 Richard 出现,这很好!但是当我输入 'Ri' 时,它并没有出现。另外,当我输入 'O' 或 'Olivia' 时,该员工也没有出现!
代码:
if (EmployeeTb.Text != string.Empty)
{
ResultsFLP.Controls.Clear();
foreach (Cerealto.Classes.Employee Employee in Cerealto.Classes.Employees.EmployeeList)
{
if (Employee.firstName.Contains(EmployeeTb.Text))
{
ESR = new EmployeeSearchResultUC(Employee.employeeID, Employee.firstName + " " + Employee.lastName);
ResultsFLP.Controls.Add(ESR);
}
}
}
else
{
ResultsFLP.Controls.Clear();
foreach (Cerealto.Classes.Employee Employee in Cerealto.Classes.Employees.EmployeeList)
{
ESR = new EmployeeSearchResultUC(Employee.employeeID, Employee.firstName + " " + Employee.lastName);
ResultsFLP.Controls.Add(ESR);
}
}
希望大家帮帮忙! :D
如果我正确理解了你的意图,
一个。你可以使用 Lambda expression 这几天学习这不是一个坏习惯。
b。请注意我对你逻辑的评论。
C。如果您想搜索而不考虑用户输入的是小写字母还是大写字母(会产生您在该问题中提出的问题),也可以使用 ToLower()
"Ri" 不是 "rI" 和 "RI" 不是 "ri" 等..
if (EmployeeTb.Text != string.Empty)
{
ResultsFLP.Controls.Clear();
var emp = Cerealto.Classes.Employees.EmployeeList.AsEnumerable().Where(x=> (x.firstName+ " " + x.lastName).ToLower().Contains(EmployeeTb.Text.ToString().ToLower().Trim())).Select(e=>e).ToList();
if(emp != null)
{
foreach(Cerealto.Classes.Employee Employee e in emp)
{
ESR = new EmployeeSearchResultUC(e.employeeID, e.firstName + " " + e.lastName);
ResultsFLP.Controls.Add(ESR);
}
}
}
else
{
// there is no results here clear everything or make no change (dont use the line ResultsFLP.Controls.Clear(); / load all employees again)
ResultsFLP.Controls.Clear();
}