Suche in Combobox

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von INOPIAE.

    Suche in Combobox

    Ich versuche im Moment ein Adressprogramm zu schreiben und habe dazu eine Combobox mit Autocomplete-Eigenschaft. Als Liste verwende ich ein Dataset mit Anrede, Vorname und Nachname aus einer Tabelle (SQL-Db) mit den kompletten Daten wie z.B. auch die Telefonnummer und Adresse (es müsste ressourcensparender sein, ein Dataset statt der kompletten Db zu benutzen?)
    Als Wertmember übergebe ich dann den Index des gewählten Namens und lasse in einer Textbox die kompletten Daten der Person anzeigen.
    Leider kann ich aber mit dem Dataset immer nur einen Wert übergeben, also entweder Vor- oder Zuname. Gibt es da evtl. eine Möglichkeit eine Stringkette als Member auszugeben (z.B. "Herr Max Mustermann") und trotzdem den Index an die Textbox zu übergeben? Nach der Auswahl eines Namens die Db nochmal danach zu durchsuchen wäre wohl ein recht primitives Workaround oder?
    Ein zweites Problem hängt mit dem ersten direkt zusammen: Der eingegebenen Name "Max Mustermann" sollte in der Dropdown-Liste dann sowohl erscheinen, wenn man ganz klassisch "ma" eingibt, aber auch bei "mu", wo sich das dann auf den Nachnamen bezieht. Eigentlich ein recht gäniges Feature (siehe Browser Adresszeile), aber... :?:
    Zum Problem der Anzeige: Erstelle in deiner SQL-Abfrage einfach eine Spalte mit den Werten die Du angezeigst haben willst: Anrede, Vorname, Nachname, Darstellung

    Eigentlich nutzt man nicht den Index zur Definition des ausgewählten Elementes zur Suche in einer DB, sondern man nutzt den Primärschlüssel, der als Valuemember genutzt wird. Dann braucht man nur noch die SelectedValue-Eigenschaft auszuwerten.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „INOPIAE“ ()

    Suche in String

    Ja, das mit dem Verknüpfen ist klar und natürlich und Index ist bei mir einfach der Name für den Primärschlüssel, mit dem ich dann die kompletten Personendaten aus der Datenbank lese.
    Das verbessert natürlich das Suchproblem nicht wirklich.
    Ich hatte zwischenzeitlich auch mal in Erwägung gezogen, die Daten einmal nach dem Vornamen und einmal nach dem Nachnamen in der Autocomplete-Liste zu speichern, aber... :wacko: oder ist es vielleicht wirklich eine Alternative, mit Contains() zu arbeiten und dann nach jeder Eingabe die Liste (mit den Autocomplete-Einträgen) zu erneuern?
    Was ich bei der Anzeige meinte ist, dass Du in der SQL-Abfrage Dir eine weitere Splate baust, die genauso aussieht wie Du Deine Werte haben möchtest z.B. Herr Max Mustermann und diese dann als DisplayMember setzt.

    Hast Du schon mal von der SQL-Klausel "WHERE" gehört?

    PS. Mit dem Begriff Index solltest Du versuchen, so umzugehen wie es für das benutzte Objekt gilt.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).