2017-11-01 4 views
-2

Ich arbeite an einem Autocompleter in C#, ich benutze eine gespeicherte SQL-Prozedur, um die Daten zu ziehen, die getestet und funktioniert.Ziehen von Daten aus Tabellen in einen Autocompleter übergeben C#

Das Problem, das ich habe, ist mit meiner for-Schleife, die ich benutze die Bestückung der Auto-Completer.

Oben ist, wo ich in Bezug auf diese gehen muss, bekomme ich keine Fehler, aber der Code funktioniert einfach nicht.

Ich habe eine Auto-Completer funktioniert aber dies hat die SQL in den Code eingebettet und ich würde lieber mit der gespeicherten Prozedur arbeiten.

+0

Definieren Sie "funktioniert nicht". Was tut es? Wenn Sie diesen Code in Ihrem Debugger durchlaufen, wo/wie unterscheidet er sich zuerst von dem, was Sie erwarten? Durchläuft diese Schleife überhaupt? Sind die Werte zu "col" hinzugefügt? Was passiert * spezifisch *? – David

+0

Beim Durchlaufen wird die autoCompleter-Methode einmal ausgeführt und dann beim zweiten Durchlauf, wenn es zu col.Add kommt. Ich bekomme den Fehler: IndexOutOfRange-Ausnahme wurde nicht behandelt – benjano

+0

Das Problem tritt auf, weil die Spalte 1 nicht gefunden werden kann. Aber von meinem Verständnis her frage ich nur, ob ich die Zeilen durchgehen soll und die Spaltennummer sollte sich nicht ändern. – benjano

Antwort

1

Das Problem ist die Verwendung von foreach(), um über Zeilen zu iterieren, dann für jede Zeile auch einen Indexer (i) verwenden.

Im ursprünglichen Codebeispiel ist die "Zeile" in jeder Iteration eine Datenzeile. Der Standardindexer dafür ist die Indexierung in die COLUMNS. In der ersten Zeile wird auf die Spalte 0 und in der zweiten Zeile auf die Spalte 1 usw. zugegriffen.

Das zweite Beispiel funktioniert, weil Sie den Indexer (i) für die Zeilenauflistungseigenschaft der Tabelle verwenden, also auf eine ROW zugreifen. In dieser Zeile verwenden Sie dann den Feldnamenindexer, um die Spalte "Typ" zu erhalten.

Wenn das erste Beispiel dieser modifizierten wurde:

AutoCompleteStringCollection col = new AutoCompleteStringCollection(); 
foreach (DataRow row in TYPESDS.Tables[0].Rows) 
{ 
    col.Add(row["Type"].ToString().ToUpper()); 
} 

Dann ist es mit dem zweiten (Arbeits-) Beispiel grundsätzlich äquivalent.

0

Ich habe aufgegeben, foreach zu verwenden und habe es auf die folgende Weise funktioniert.

for (int i = 0; i < TYPESDS.Tables[0].Rows.Count - 1; i++) 
    { 
     col.Add(TYPESDS.Tables[0].Rows[i]["Type"].ToString().ToUpper()); 
    } 

Ich denke, das Hauptproblem kam mit nicht [[Type]] mit Zeilen [i].

Verwandte Themen