2009-05-02 17 views
6

Ich habe ein Problem mit einer Continue-Anweisung in meiner C# Foreach-Schleife.C# Foreach-Schleife - Fortfahren Problem

Ich möchte es überprüfen, ob eine leere Zelle in der Datagridview ist, und wenn ja, dann überspringe den Wert aus und weitermachen, um die nächste Zelle zu überprüfen.

Hilfe sehr geschätzt.

Hier ist der Code:

foreach (DataGridViewRow row in this.dataGridView1.Rows) 
{        
    foreach (DataGridViewCell cell in row.Cells) 
    { 
     if (cell.Size.IsEmpty) 
     { 
      continue; 
     } 
     MessageBox.Show(cell.Value.ToString()); 
    } 
} 
+0

Sie das Problem, das Sie sehen, zu erwähnen vernachlässigt haben ... –

Antwort

16

Nun, Sie prüft derzeit, ob die Größe der Zelle Null ist. In einem Gitter hat jede Zelle in einer Spalte die gleiche Breite und jede Zelle in einer Reihe hat die gleiche Höhe (normalerweise sowieso).

Sie möchten basierend auf dem Wert der Zelle überprüfen. Zum Beispiel:.

if (cell.Value == null || cell.Value.Equals("")) 
{ 
    continue; 
} 

Tweak dieser für andere Darstellungen von „leeren“ Werte, die Sie interessiert sind Wenn es viele sind, können Sie eine bestimmte Methode für diese schreiben, und es in der Prüfung nennen :

if (IsEmptyValue(cell.Value)) 
{ 
    continue; 
} 
+0

wir nicht, # Programmierer im allgemeinen C bleiben weg von weiter/goto st Atmen? Ich verstehe, dass sie ihre Plätze in einigen Sprachen haben und könnte verwendet werden, um mit einigen fiesen Dingen wegzukommen ... aber persönlich habe ich nie eine Fortsetzunganweisung für irgendetwas wie die Beispiele oben verwenden müssen. –

+9

Nein, ich finde weiter und Pause sind in Ordnung - obwohl ich nie goto verwendet habe. Insbesondere möchte ich nicht einfach die Bedingung invertieren und alles in einen anderen Block setzen - die Verschachtelung wird verrückt im Vergleich mit der Einfachheit von "Ich möchte nichts anderes in dieser Iteration tun, wenn diese Bedingung erfüllt ist." –

4

Sie brauchen nicht hier das weiterhin Schlüsselwort verwenden, können Sie dies nur tun:

foreach (DataGridViewRow row in this.dataGridView1.Rows) 
{        
    foreach (DataGridViewCell cell in row.Cells) 
    { 
     if (!cell.Size.IsEmpty) MessageBox.Show(cell.Value.ToString()); // note the ! operator 
    } 
} 

Auch Sie überprüfen, ob die Größe der Zelle ist leer. Wollen Sie das wirklich tun?

Welche Fehler erhalten Sie?

2

Sollten Sie nicht überprüfen, ob der Wert der Zelle leer ist, nicht die Größe?

if(String.IsNullOrEmpty(cell.Value.ToString())) 
    continue; 
1

i nur Zelle lesen wollen [1] Daten ... olny

foreach (DataGridViewRow row in this.dataGridView1.Rows) 
{        
    foreach (DataGridViewCell cell in row.Cells[1]) 
    { 
     if (cell[1].Value == null || cell.Value.Equals("")) 
{ 
    continue; 
} 

     MessageBox.Show(cell[1].Value.ToString()); 
    } 
}