2016-04-01 11 views
3

PostgreSQLデータベースのデータを使用してWindowsフォームに自動補完テキストボックスを実装しようとしています。私の問題を説明しようとしましょう:2つのフィールドのデータを使用してテキストボックスをオートコンプリートする

データベースでは、私は別々のfirstNameとlastNameフィールドを持つテーブルがあります。

私のWindowsフォームアプリケーションでは、firstNameまたはlastNameのいずれかを使用して検索し、そこからオートコンプリートオプションを提供する機会を提供したいと考えています。

たとえば、firstName "Goat"とlastName "McGoats"というテーブルにエントリがある場合、私は "Goat McGoats"(firstName {space} lastName)を私のWindowsフォームのテキストボックスで、「G」または「M」のどちらを入力するかは、ファーストネームまたはラストネームのいずれかの開始です。

今のところ、1つの列(つまり、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#のサポートでこの機能をしていますか?または、テキストボックスの下に隠しリストボックスを追加し、検索文字列を使用して手動で値を入力するだけです。

答えて

0

実装はIAutoCompleteに拡張されたIAutoComplete2に依存するため、サポートされません。テキストボックスは、コレクションの値をすべて準備して、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"])); 

しかし、あなたは唯一のファーストネームまたはテキストボックスに姓を期待する場合には、後処理が必要な場合があります。

関連する問題