Benutzer mit den meisten Antworten
Dynamisches Autocomplete mit ADO.NET // Dynamic Autocomplete

Frage
-
/*
Hallo
Also, ich komme mal gleich zur Sache...
grundsätzlich gibt es eine Datenbank, die abgefragt wird über Ado.net.
Diese soll durchsucht werden.
Hierzu gibt es
1. Combobox cmbSSpalte(mit Spaltenbezeichnungen für die Datenbank)
2. Textfelder für Suchbegriffe (where), diese sollen eine Autvervollständigen Funktion haben, diese
speißt sich dynamisch aus der Datenbank. Wenn ich über die Combobox die Spalte verändere
dann soll die colvalues Collection geleert und mit den Werten der neuen Spalte gefüllt werden.
Beim Programmstart, geschieht das mit einem Default-Wert.
Mit dem Default-Wert zum Start klappt das auch wunderbar, sobald ich aber, in der Combobox,
die Spalte ändere hängt sich das Programm sofort auf. Keine Exception, Textboxen werden ReadOnly und blinken.
Ich dachte an folgende Fehler,
a) Falsche Spaltenbezeichung, aber zum start klappt es mit allen Spalten.
b) Zu viel Werte, logisch, aber siehe a)
Ich versuchte der AutoCompleteCustomSource = colValues, dynamisch durch andere gleichartige Collections
zu ersetzen, AutoCompleteCustomSource = colValues2
aber das geht auch nicht, dann startet das programm nicht mehr.
Bezeichnungen:cmbSSpalte --> combobox
tbSubis -->Textbox2 Suchbis. (Wird bisher noch nicht verwendet.)
tbSuvon --> Textbox1 Suchvon.
ds --> Dataset.Hat da irgendwer, irgendeine Idee, sitze da jetzt schon ewig dran und verstehe, das Problem nicht wirklich..
*/
AutoCompleteStringCollection colValues = new AutoCompleteStringCollection();private void Form1_Load(object sender, EventArgs e)
{
//Irgendwelche Funktionen haben nichts mit dem Thema zu tun...//Standardwert für cmbSSpalte
cmbSSpalte.SelectedItem = "Mand. Name";//Standardquelle für das Autokomplete
tbSuvon.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
tbSubis.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
tbSuvon.AutoCompleteSource = AutoCompleteSource.CustomSource;
tbSubis.AutoCompleteSource = AutoCompleteSource.CustomSource;
tbSuvon.AutoCompleteCustomSource = colValues;
tbSubis.AutoCompleteCustomSource = colValues;
}
private void cmbSSpalte_SelectedIndexChanged(object sender, EventArgs e)
{
if (cmbSSpalte.SelectedItem.Equals("Mand. Nr.") || cmbSSpalte.SelectedItem.Equals("Jahrgang"))
{
tbSubis.ReadOnly = false;
}
else
{
tbSubis.Text = "";
tbSubis.ReadOnly = true;
}
//Hier wird der Spaltenname von der Bezeichung für den User in den SQL-Spaltennamen(string)
//umgewandelt und an Fillbox übergeben
Fillbox(comzuSpalte(cmbSSpalte.SelectedItem.ToString()));
}private void Fillbox(string spalte)
{
//hatte schon die Zuweisung hier versucht, aber wie gesagt, dann hängt es komplett... =-(
//tbSuvon.AutoCompleteCustomSource = colValues;
//tbSubis.AutoCompleteCustomSource = colValues;
colValues.Clear();
//Tabelle aus dem Dataset...
tbl = ds.Tables[0];
//einmal alle Zeilen durchgehen.
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
colValues.Add(tbl.Rows[i][spalte].ToString());
}
}
Antworten
-
Also ich habe jetzt noch mal darauf geachtet, dass wirklich alles in try Catch blöcken ist, aber keine Änderung.
Wenn ich debugging laufen lasse, das dauert schon beim Programmstart ewig, wenn er das Dataset füllt... oh man... =-(
Naja, das Debbuging bringt mich nicht weiter...
Ich kann ja schritt für Schritt durchlaufen lassen, aber sobald das Fenster dann irgendwann aufgeht, kann man nichts mehr bewegen, weil der Debbuger bei jeder Mausbewegung in irgendwelche Events springt und ich keine Chance habe, den cmbSSpalte_SelectedIndexChanged auszulösen.... =-(
EDIT: Hab das Problem gefunden.
Ich war eben Kaffemachen, während das Programm hing, als ich wieder da war, war alles gut.
mit anderen Worten, es kommt tatsächlich nicht zur Exception, es ist nur saulangsam.
Hat jemand eine Idee warum es zum Programmstart so schnell geht und zur Laufzeit ewig braucht...
Gibt es eine schnellere Methode, als die von mir oben genutzte...??? Wenn ihr da Tipps habt, das wäre echt klasse....
- Als Antwort markiert Jeffrey Goines Montag, 23. Mai 2011 08:44
Alle Antworten
-
Hi,
pack mal bitte jeden Block in ein try catch.....
Das sollte dir eventuell ein bisschen was helfen.
Wie sieht es aus mit dem Debug? Haltepunkte mal gesetzt um zu sehen wo er was überspringt bzw. sich "aufhängt"?Versuch das mal und poste dann die Ergebnisse. Dann sollte man relativ schnell dahinter kommen.
Grüße,
Dominik
C# und VB.NET sind wie eine Schachtel Pralinen, ich weiß nie was ich bekomme xD -
Also ich habe jetzt noch mal darauf geachtet, dass wirklich alles in try Catch blöcken ist, aber keine Änderung.
Wenn ich debugging laufen lasse, das dauert schon beim Programmstart ewig, wenn er das Dataset füllt... oh man... =-(
Naja, das Debbuging bringt mich nicht weiter...
Ich kann ja schritt für Schritt durchlaufen lassen, aber sobald das Fenster dann irgendwann aufgeht, kann man nichts mehr bewegen, weil der Debbuger bei jeder Mausbewegung in irgendwelche Events springt und ich keine Chance habe, den cmbSSpalte_SelectedIndexChanged auszulösen.... =-(
EDIT: Hab das Problem gefunden.
Ich war eben Kaffemachen, während das Programm hing, als ich wieder da war, war alles gut.
mit anderen Worten, es kommt tatsächlich nicht zur Exception, es ist nur saulangsam.
Hat jemand eine Idee warum es zum Programmstart so schnell geht und zur Laufzeit ewig braucht...
Gibt es eine schnellere Methode, als die von mir oben genutzte...??? Wenn ihr da Tipps habt, das wäre echt klasse....
- Als Antwort markiert Jeffrey Goines Montag, 23. Mai 2011 08:44