C# 创建一个对名字和姓氏都有效的自动完成文本框
我在Winforms应用程序上创建了一个自动完成文本框C# 创建一个对名字和姓氏都有效的自动完成文本框,c#,winforms,textbox,C#,Winforms,Textbox,我在Winforms应用程序上创建了一个自动完成文本框 private void txtClientName_TextChanged(object sender, EventArgs e) { if (txtClientName.Text.Length == 1) { completeCollection.Clear(); CustomerRepository repo = new CustomerRepository(); var
private void txtClientName_TextChanged(object sender, EventArgs e)
{
if (txtClientName.Text.Length == 1)
{
completeCollection.Clear();
CustomerRepository repo = new CustomerRepository();
var customers = repo.FindAllCustomers().Where(u => u.Name.StartsWith(txtClientName.Text) || u.LastName.StartsWith(txtClientName.Text));
foreach (var customer in customers)
{
completeCollection.Add(customer.Name + " " + customer.LastName);
}
txtClientName.AutoCompleteMode = AutoCompleteMode.Suggest;
txtClientName.AutoCompleteSource = AutoCompleteSource.CustomSource;
txtClientName.AutoCompleteCustomSource = completeCollection;
}
}
当我输入一个名字,即:塞尔吉奥-它的工作
但是,当我输入姓氏时,即古铁雷斯,它不会获取结果
问题在于我在FindAllCustomers()方法中对IQueryable使用的查询
我应该换什么?此外,您是否推荐一种更好的方法来“解雇”自动完成群体?目前,我只在文本长度为1时提取记录。这是因为如果有人键入“s”,则只会加载以s开头的姓名或姓氏 自动完成系统根据已键入的内容过滤您的customsource。因此,不会显示您的姓氏匹配项 我建议您将当前查询更改为仅搜索名称,而不搜索Lastname。在for each语句之后,执行另一个查询,这次只搜索lastname,然后再次执行for each循环,但将内部代码更改为:
completeCollection.Add(customer.Lastname + ", " + customer.Name);
这一次,文本框也应该显示以姓氏开头的客户。我在两个或多个应用程序中使用了自动完成文本框。这对我来说很好