2017-10-24 4 views
-1

Wenn ich das folgende Codefragment ausführen:Hinzufügen von Zeilen in einer Schleife

IXLRange dataRange = worksheet.Range(1, 1, myData.Count, 4); 
foreach (var row in dataRange.Rows()) { 
    //int cells = row.CellCount(); 
    if (isEndOfGroup) { 
     row.InsertRowsBelow(1); 
     var rowBelow = row.RowBelow(); 
     // Do stuff with the added row, like adding a subtotal 
    } 
} 

Was hier eigentlich passiert? Es scheint so, als ob die Zeilensammlung, die iteriert wird, aktualisiert wird, was ich möchte, weil die auskommentierte Zeile bei der nächsten Iteration eine Ausnahme mit dem Fehler "Bereich ist ungültig" auslöst, als ob die Zeile irgendwie nicht stimmt. t initialisiert worden.

Ich verstehe, eine Sammlung zu ändern, wie Sie es durchlaufen, ist eine schlechte Praxis, aber ich habe dies zuvor ohne irgendwelche Probleme getan.

Was wäre ein alternativer Weg, dies zu erreichen?

Antwort

-1

I eine for Schleife endete als Bagerfahrer einen zweiten Zähler vorgeschlagen und mit Spur der Zeilennummer zu behalten:

int rowNum = 1; // Row numbering starts at 1 
for (int i = 0; i < myData.Count; i++) { 
    var row = worksheet.Row(rowNum); 
    if (isEndOfGroup) { 
     row.InsertRowsBelow(1); 
     rowNum++; 
     var rowBelow = row.RowBelow(); 
     // Do stuff with the added row, like adding a subtotal 
    } 
    rowNum++; 
} 

Diese mich in myData indizieren kann Daten für das Abrufen und auch verfolgen, wo Ich schreibe in die Tabelle.

0

Ändern Sie niemals eine Sammlung beim Iterieren ... Es ist ein Gebot. Nutzen Sie die for-Schleife. Wenn es zuvor keine Ausnahme ausgelöst hat, dann haben Sie nur den Inhalt der Zeile geändert, aber nicht den Verweis auf die Zeile selbst.

+0

Was meinen Sie mit * "Nutzen Sie die for-Schleife" *? –

+0

Die for-Schleife verwendet nicht den 'IEnumerable ', der nicht während des Iterierens geändert werden kann (foreach-Schleife erhält den Enumerator durch 'Rows(). GetEnumerator()'. Stattdessen kann die for-Schleife verwendet werden, indem Sie Ihre Referenz von Zeile in Ihrer Liste nach Index. – Bagerfahrer

Verwandte Themen