2016-04-01 52 views
3

我試圖在Windows窗體上使用PostgreSQL數據庫中的數據實現自動完成文本框。讓我試着解釋我的問題:C# - 使用來自兩個字段的數據自動完成文本框

在數據庫中,我有一個分別具有firstName和lastName字段的表。

在我的Windows窗體應用程序中,我想提供使用firstName或lastName進行搜索並提供自動完成選項的機會。例如,如果我在名字爲「Goat」和lastName「McGoats」的表上有條目,我希望能夠在我的「建議」中獲得「Goat McGoats」(firstName {空}} lastName) Windows窗體文本框是否輸入「G」或「M」 - 名字或姓氏的開頭。

現在,我所擁有的是一列的工作解決方案(即)我可以使用firstName(或單獨的姓氏)填充AutoCompleteSource,然後搜索將對此起作用。在上面的例子中,這意味着鍵入G會給「山羊」作爲一個建議 - 注意,它並不建議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#中支持這種功能?或者是在文本框下方添加一個隱藏的列表框,並使用搜索字符串手動填充這些值,這是實現此目的的唯一方法?

回答

0

不,這是不支持的,因爲實施取決於IAutoComplete2,其延伸IAutoComplete。該文本框準備從集合中的所有這些值,以便它們可以被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"])); 

但是你可能需要後期處理,如果你只想到一個名字或在文本框中一個姓。