创建一个适用于名字和姓氏的自动填充文本框

时间:2011-03-27 18:11:22

标签: c# winforms textbox

我在Winforms应用程序上创建了一个自动填充文本框。

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;
    }
}

当我输入名字时,即:塞尔吉奥 - 它有效。

但是,当我输入姓氏时,即:gutierrez - 它无法获取结果。

问题在于我在FindAllCustomers()方法中对IQueryable使用的查询。

我应该改变什么?此外,您是否建议更好地“解雇”自动填充群体?目前,我只在文本长度为1时才提取记录。这是因为如果有人输入's',那么只会加载以s开头的名字或姓氏。

2 个答案:

答案 0 :(得分:1)

我在两个或多个应用程序中使用了this自动完成文本框。它对我来说很好。

答案 1 :(得分:0)

自动填充系统会根据已输入的内容过滤您的海关来源。因此,您的姓氏匹配将不会显示。

我建议您将当前查询更改为仅搜索名称而不是姓氏。在为每个语句执行另一个查询之后,这次只搜索lastname,然后再次执行for each循环,但将内部代码更改为:

completeCollection.Add(customer.Lastname + ", " + customer.Name);

这次文本框也应该显示以姓氏开头的客户。