C# - 使用来自两个字段的数据自动填充文本框

时间:2016-04-01 16:48:17

标签: c# database winforms postgresql autocomplete

我尝试使用PostgreSQL数据库中的数据在Windows窗体上实现自动完成文本框。让我试着解释我的问题:

在数据库中,我有一个分别包含firstName和lastName字段的表。

在我的Windows窗体应用程序中,我想提供使用firstName或lastName进行搜索的机会,并从那里提供自动完成选项。

所以例如,如果我在表上有一个带有firstName" Goat"和lastName" McGoats",我希望能够获得#34; Goat McGoats" (firstName {space} lastName)作为我的Windows窗体文本框中的建议是否输入" G"或" M" - 姓氏或姓氏的开头。

现在,我所拥有的是一个列的工作解决方案(即)我可以单独使用firstName(或仅使用lastName)填充AutoCompleteSource,然后搜索就可以了。在上面的例子中,这意味着键入G将给出" Goat"作为建议 - 注意,它不建议firstName + lastName。

目前的代码如下:

nameTextBox.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
nameTextBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
AutoCompleteStringCollection collection = new AutoCompleteStringCollection();

// Retrieve all rows
cmd.CommandText = "SELECT * FROM users";
using (var reader = cmd.ExecuteReader())
{
    while (reader.Read())
    {
        collection.Add(reader["firstName"].ToString());
    }
}

nameTextBox.AutoCompleteCustomSource = collection;

C#中的自动完成是否支持此功能?或者是在文本框下面添加一个隐藏的列表框,并使用搜索字符串手动填充值,这是唯一的方法吗?

1 个答案:

答案 0 :(得分:0)

不,这是不受支持的,因为实施取决于扩展IAutoComplete2IAutoComplete。文本框准备了集合中的所有值,以便IEnumString可以使用它们,这就是它。然后将所有处理推迟到本机实现。

AUTOCOMPLETEOPTIONS 似乎没有一个人能满足您的使用需求。

如果您不想自己实施建议,可以添加名字和姓氏的组合。这将使你的字符串数量增加一倍,但在小集合上,这可能不是问题。在循环中,您将代码更改为:

// firstname, lastname
collection.Add(String.Format("{0}, {1}",reader["firstName"], reader["lastName"])); 
// lastname, firstname
collection.Add(String.Format("{1}, {0}",reader["firstName"], reader["lastName"])); 

但如果你只想要文本框中的名字或姓氏,你可能需要进行后期处理。