2016-04-01 5 views
3

Ich versuche, ein Auto-Vervollständigen-Textfeld in Windows Forms mit Daten aus einer PostgreSQL-Datenbank zu implementieren. Lassen Sie mich versuchen, mein Problem zu erklären:C# - Autovervollständigen eines Textfeldes mit Daten aus zwei Feldern

In der Datenbank habe ich eine Tabelle, die firstName und lastName Felder getrennt haben.

In meiner Windows Forms-Anwendung möchte ich die Möglichkeit bieten, entweder mit firstName oder lastName zu suchen und die AutoVervollständigen-Optionen von dort aus bereitzustellen.

Also zum Beispiel, wenn ich einen Eintrag in der Tabelle mit firstName "Goat" und lastName "McGoats" habe, möchte ich "Goat McGoats" (firstName {space} lastName) als Vorschlag in meinem bekommen Windows Form Textfeld, ob ich "G" oder "M" eintippe - der Anfang von Vor- oder Nachnamen.

Im Moment habe ich eine funktionierende Lösung für eine Spalte (d. H.) Ich kann die AutoCompleteSource mit dem ersten Namen allein (oder lastName alleine) füllen und dann würde die Suche daran arbeiten. Im obigen Beispiel würde das bedeuten, dass man "Goat" als Vorschlag eingeben würde - Anmerkung, es schlägt nicht firstName + lastName vor.

Der aktuelle Code sieht so aus:

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; 

Ist die automatische Vervollständigung in C# diese Funktion unterstützen? Oder fügen Sie eine versteckte Listbox unterhalb des Textfelds hinzu und füllen Sie die Werte manuell mit dem Suchstring, um dies zu tun?

Antwort

0

Nein, das wird nicht unterstützt, da die Implementierung von IAutoComplete2 abhängt, die IAutoComplete erweitert. Das Textfeld bereitet alle diese Werte aus der Sammlung vor, so dass sie von IEnumString verwendet werden können und das ist es. Die gesamte Verarbeitung wird dann an die native Implementierung übergeben.

Auch keine der AUTOCOMPLETEOPTIONS scheinen für Ihren Anwendungsfall gerecht zu werden.

Wenn Sie das, was Sie vorgeschlagen haben, nicht selbst implementieren möchten, können Sie beide Kombinationen aus Vor- und Nachname hinzufügen. Das wird die Anzahl der Strings verdoppeln, aber bei kleinen Sets ist das kein Problem. In der Schleife ändern Sie den Code:

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

Aber Sie könnten Nachbearbeitung benötigen, wenn Sie nur einen Vornamen oder einen Nachnamen in der Textbox erwarten.

Verwandte Themen