hallo zusammen 😃
ich habe folgendes Problem:
es gibt eine auswahlmaske, u.a. eine Combobox die sich an eine Tabelle binden soll.
die Tabelle hat mehr als 300.000 datensätze und sie wird nicht kleiner!
die SQL-abfrage geht relativ zügig, nur wenn ich display- und value-member der Combobox setze und die Tabelle anschließend an die Combobox binden möchte, dauert das ganze Prozedere über eine Minute und das ist nicht wirklich schön.
ich steh grad auf dem schlauch, was man da sonst noch machen kann....
jemand von euch ne schöne Idee parat?
beste grüße und angenehmen tag 😉
Lager das Ganze in einen Background-Thread aus. Und stell dir die Frage: Wer kann 300.000 und mehr Datensätze auf einmal lesen? 😉 Schafft kein Mensch. Daher hol weniger und lad die Daten nach.
[FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
[Artikel] Multi-Threaded Programmierung
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
@Coffeebean:
Lager das Ganze in einen Background-Thread aus.
Genau das geht hier nicht, ist ja UI Thread.
@kraeppy:
Das ist nicht wirklich dein ernst, 300.000 Datensätze in eine ComboBox zu binden, oder?
ich würds ja gerne anders machen, aber habe wie gesagt gerade keine schöne Idee es besser zu machen -.-
ich überführe zz ne alte access-Anwendung und dort wurde es so gemacht, dass die Tabelle an eine Combobox gebunden wurde, sodass der benutzer einen wert auswählen konnte, mit dem gearbeitet (ändern/löschen) werden konnte....
Anforderung ist eben, dass gui etc so gut wie gleich bleiben soll 😕
würd ja auch lieber n datagridview nehmen, vorher filter setzen, sodass relativ wenig angezeigt wird und der benutzer sich den zu bearbeitenden datensatz auswählen kann... ist aber leider net gewünscht -.-
Und wer soll aus einer Auswahl von 300.000 Datensätze einen Eintrag finden? Meiner Meinung nach ist dieser Ansatz der komplett falsche Weg!
Hi,
Du könntest mal nach einem geeigneten Autocomplete-Control o.ä. suchen. Da müssen nicht alle angezeigt werden und der Benutzer sieht eine Auswahl die zu seinem Suchbegriff passt.
Anforderung ist eben, dass gui etc so gut wie gleich bleiben soll 😕
Zeig demjenigen der die Anforderung gestellt hat doch einfach mal die Performance Deiner aktuellen Version und überlege dann mit ihm zusammen eine alternative Lösung, wie z. B. eine separate Suchmaske.
Alternativ gibt es auch Comboboxen/Dropdowns von Drittherstellern bei denen das Binden der Daten deutlich schneller geht. Ich habe' gerade das Dropdown-Control von Telerik getestet, da brauchen 300.000 Datensätze zum Binden an das Control 5 Sekunden.
Sorry, aber unabhängig von der Zeit - es macht keinen Sinn 300.000 Einträge in eine Combobox zu packen.... Wer soll diese auswählen?
@Stefan.Haegele
In Access konnte man in einer ComboBox Text eintippen, das Teil sprang dann zum ersten gefundenen Satz. Das haben Generationen an PowerUsern so verwendet, jetzt bekommen sie eine neue Software und wollen unbedingt diese veraltete Funktionalität weiter verwenden. Das ist leider in der Praxis häufiger so.
@Witte
Und da ist es Aufgabe des Entwickler zu sagen, dass dieser Weg falsch ist... Manchmal muss man seine Kunden/Vorgesetzte auch etwas zu ihrem Glück zwingen..
Naja, das kann man auch ganz einfach anders lösen.
Eine TextBox, einen Timer und erst wenn mehr als 3 Zeichen eingegeben wurden
wird mit filter gelesen.
Das reduziert die Menge meist auf hunderte.
Danach kann man ja dann auf autocomplete "umsteigen".
Ist deutlich Performanter als das Binden der CB an die ganze liste.