ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
480
480
EMPFEHLEN
-
Hallo zusammen,
ich habe ein Problem mit einer Suchfunktion. Ich habe eine Suchefunktion geschrieben die Ihre Aufgabe auch einwandfrei erfüllt. Mein Problem ist nur, dass diese Suchfunktion sehr sehr langsam ist. Ich habe die Vermutung das meine For-Schleife das ganze einfach sehr langsam macht. Leider kenne ich keinen Weg dieses Geschwindigkeitsproblem zu lösen.
Vielleicht ist hier ja ein erfahrender Programmierer der mir helfen kann!
Hier einmal mein Code:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
private void txtSucheEingabe_TextChanged(object sender, EventArgs e) { if (this.txtSucheEingabe.Text != "") { //markierung mitwander lassen int maxindex = this.lstErgebnis.Items.Count; string text; for (int index = 0; index < maxindex; index++) { text = this.lstErgebnis.Items[index].ToString(); if (text.Length < this.txtSucheEingabe.Text.Length) { } else { string help = text.Substring(0, this.txtSucheEingabe.Text.Length).ToUpper(); if (help == this.txtSucheEingabe.Text.ToUpper()) { int help2 = this.lstErgebnis.Items.IndexOf(this.lstErgebnis.Items[index]); this.lstErgebnis.SelectedIndex = help2; break; } } } } }
Nun noch eine Beschreibung was diese Suchfunktion machen soll:
Ich habe auf einem Dialog eine Listbox (lstErgebnis). In dieser Listbox sind alle Kunden aufgeliestet. Die Kundennamen werden aus einer SQL Datenbank ausgelesen und in die Listbox geschrieben. Die Listbox ist soriert von A nach Z.
Auf dem Dialog gibt es jetzt noch ein Textfeld (txtSucheEingabe). Der Benutzer hat hier die möglichkeit der Sucheingabe. Der Fokus in der Listbox soll mit der Eingabe immer mitwander. Sprich wenn der Benutzer ein "M" eingibt soll der erste Kundenname mit "M" markiert werden. Wenn jetzt der Benutzer noch ein "E" eingibt (spriche im Textfeld steht jetzt "ME") soll der erste Kundenname mit "ME" markiert werden. So soll es immer weitergehn. Sollte mal keine Übereinstimmung gefunden werden, soll auch kein Kundenname markiert werden. Die Groß- und Kleinschreibung sollte dabei keine Rolle spielen.Achtung******!! Diese Nachricht kommt von einer Frau.
-
Mit welchem Framework arbeitest du? Version 2.0? Wenn ja, ginge das einfacher:
AutoCompleteCustomSource setzen (zusätzlich zur normalen DataSource)
AutoCompleteMode auf Suggest stellen
AutoCompleteSource auf ListItems stellen
Fertig.
Unter 1.1 gehts glaub ich auch, ohne viel Sourcecode schreiben zu müssen, muss ich aber mal nachsehen, hab nur 2.0 im Moment hier.
-
Hallo,
ja ich arbeite mit dem neusten Framework 2.0. Ich werde es mal ausprobieren. Mal sehn ob es so funktioniert wie ich mir das vorstelle.
Danke IsabelleAchtung******!! Diese Nachricht kommt von einer Frau.
-
Dann lies doch die Kunden schon sortiert aus der Datenbank
Code sql:1 2
SELECT Kundenname FROM Kunde WHERE ... ORDER BY Kundenname
Greetz"Gott ist tot! Gott bleibt tot! Und wir haben ihn getötet." - Friedrich Nietzsche
-
Wenn ich die 3 Eigenschaften eingestellt habe, wie erreiche ich jetzt das die markierung mit der Eingabe mitwanderndert?
Zitat von Norbert Eder
gruß IsabelleAchtung******!! Diese Nachricht kommt von einer Frau.
-
Mit der Sortierung habe ich kein Problem. In meiner listbox werden die Werte sortiert angezeigt. Das was ich möchte ist, wenn der Benutzer in einem seperaten Textfeld eine Eingabe macht soll die Markierung im der Listbox mitwander, wenn was gefunden wird. Spriche gebe ich ein M ein geht die Markierung der listbox auf den ersten Eintrag der mit M beginnt.
Zitat von LordDeath
IsabelleAchtung******!! Diese Nachricht kommt von einer Frau.
-
Aaaaaaaaaaaasoooooooo. Ich hab dich falsch verstanden. Ich dachte, du willst ein AutoComplete-Feature in der ComboBox. Sorry.
Aber, eventuell könnte man das kombinieren. Was ist, wenn du die von mir beschrieben 3 Punkte machst und einfach nur den in der Textbox eingegebenen Wert in die ComboBox überträgst? Ich kann es leider jetzt nicht testen, denn diesmal hab ich nur 1.1 installiert
-
Sorry Bella_Isy ich hab es heute früh verpeilt, es war einfach noch zu Früh!
Greetz"Gott ist tot! Gott bleibt tot! Und wir haben ihn getötet." - Friedrich Nietzsche
-
So, nachdem ich so ziemlich alles falsch gelesen hab und missverstanden hab, hier eine Lösung für dich.
Das was du machst (und das ist unnötig): Du suchst _immer_ von Anfang an. Einfach den letzten Index merken der markiert wurde und bei einer Änderung des Textes von dort weitersuchen.
Damit bist du um einiges schneller. Das einzige was du noch einbauen musst ist, dass lastindex wieder auf 0 gestellt wird, wenn der Text in der Textbox zurückgesetzt wird.Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
int lastindex = 0; private void txtSucheEingabe_TextChanged(object sender, EventArgs e) { if (this.txtSucheEingabe.Text != "") { //markierung mitwander lassen int maxindex = this.lstErgebnis.Items.Count; string text; for (int index = lastindex; index < maxindex; index++) { text = this.lstErgebnis.Items[index].ToString(); if (text.Length > this.txtSucheEingabe.Text.Length) { string help = text.Substring(0, this.txtSucheEingabe.Text.Length).ToUpper(); if (help == this.txtSucheEingabe.Text.ToUpper()) { int help2 = this.lstErgebnis.Items.IndexOf(this.lstErgebnis.Items[index]); this.lstErgebnis.SelectedIndex = help2; break; } } } } }
Zusatz
Wird ein Zeichen gelöscht, musst du in die entgegengesetzte Richtung suchen. Das musst noch einbauen.
Ähnliche Themen
-
Rennspiel - Schnellere Zeiten möglich?
Von String im Forum Flash PlattformAntworten: 7Letzter Beitrag: 15.07.09, 15:58 -
Allgemeine Query-Frage: schnellere Variante
Von sth_Weird im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 30.01.09, 13:21 -
Schnellere Builds mit Multithreaded Compilation
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 09.07.08, 22:55 -
Schnellere Funktion mit ob_start(); ?
Von Freakz91 im Forum PHPAntworten: 4Letzter Beitrag: 11.06.08, 16:20 -
Schnellere Lösung? (2 for-Schleifen verursachen lange Wartezeit)
Von chilimaus im Forum PHPAntworten: 6Letzter Beitrag: 05.06.08, 12:47





Zitieren
Login





