2009-08-05 13 views
2

Ich hoffe, dass jemand mit einer Ausnahme helfen kann, die ich geerbt habe. Im Grunde schreibe ich die Zeilen in einem Datagrid in eine Textdatei. Was gut funktioniert, außer wenn die Zeile ausgeblendet ist, wenn die Zeile ausgeblendet ist, wird die Ausnahme "Index war außerhalb der Grenzen des Arrays" auf die unten markierte Zeile geworfen. Danke für jede Hilfe.C# Index war außerhalb der Grenzen des Arrays

DataRow dr; 

for (int i = 0; i < bindingManagerBase.Count; i++) 

{bindingManagerBase.Position = i; 

    dr = ((DataRowView)bindingManagerBase.Current).Row; 

    bindingManagerBase.SuspendBinding(); 
    try 
    { 

     int rowIndex = dr.Table.Rows.IndexOf(dr); 

     if (!rowsDisplayStatus[rowIndex]) //<---------Exception here "Index was outside the bounds of the array" //Picture below 
     { 
      m_Dgv.Rows[rowIndex].Visible = false; 
      continue; 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message.ToString()); 
    } 
    finally 
    { 
     bindingManagerBase.ResumeBinding(); 
    } 
    writeData(tw, dr); 
    iIndex++; 
} 

alt text http://i28.tinypic.com/14e84mg.png

+1

Sie haben nicht gebucht erhalten genug Code. Was ist 'rowsDisplayStatus'? Wie und wo wird es aufgebaut? Welche Dimensionen hat/sollte es haben? ... –

+0

Was ist rowIndex? und wie ist es definiert? – ThePower

Antwort

2

Sie erhalten den Zeilenindex und versuchen dann, ihn mit zu verwenden. Sie können den Datenbankzeilenindex nicht als Index für Ihre Sammlungen verwenden.

ich ändern würde:

if (!rowsDisplayStatus[rowIndex]) 

zu:

if (!rowsDisplayStatus[i]) 
+0

danke Mark, das hat den Trick gemacht. –

1

Wie wird rowsDisplayStatus bevölkert? Wenn es nur ein Element enthält und etwas auf Index 9 erwartet wird, sollten Sie sich den Code anschauen, der ihn enthält.

0

Wie das Bild zeigt, hat rowsDisplayStatus 1 Element ... Sie versuchen, das 10. Element (oder das Element bei Index 9) zu ziehen ... dieser Index liegt außerhalb des Bereichs.

0

Wie wird "rowsDisplayStatus" bevölkert? Vielleicht gibt es ein Problem in dieser Routine.

0

Ich werde erklären, was Mark oben gesagt hat. (Sie wissen nicht, wie zu kommentieren, so setzen diese in einer Antwort) Er ist richtig Sie den für diesen

if (!rowsDisplayStatus[rowIndex]) 

In

if (!rowsDisplayStatus[i]) 

Der Grund ist ändern sollten wie folgt:

Der rowIndex wächst sogar, wenn Zeilen zuvor aus dem Rows-Objekt gelöscht wurden. Es könnte also nur eine oder zwei Zeilen in der dr.Table.Rows geben, aber sie könnten Indizes (Indizes) von beispielsweise 8 und 9 haben (weil zuvor die Zeilen 1 bis 7 gelöscht wurden oder aus anderen Gründen).

So erhalten Sie den aktuellen rowIndex, indem Sie die Eigenschaft bindingManager.Current.RowIndex überprüfen.

Aber Ihr rowsDisplayStatus ist ein einfaches Array (oder ArrayList) mit der richtigen Anzahl von Zeilen nach i. Also für Zeilenindex: 8 (die erste Zeile) sollten Sie rowsDisplayStatus [0] betrachten (was der Wert von i ist), und für Zeilenindex: 9 (die zweite Zeile) sollten Sie rowsDisplayStatus [1] betrachten ... usw.

HTH, Moshe

0

Grundsätzlich, wenn ich diesen Fehler erhalten den Index (oder Wert, die ich gesetzt haben) war nicht existierend zu der Zeit auf diese Seite verwiesen wurde.

Zum Beispiel, wenn ich zwei Elemente in einer List-Box und ich TRYI ein drittes Element zu verweisen, ich einen Index Out Of Range Ausnahme (oft in der Vergangenheit) ...

Verwandte Themen