2009-05-02 27 views
6

Tengo un problema con una instrucción continue en mi ciclo de C# Foreach.C# Foreach Loop - Continuar con el número

Quiero que compruebe si hay una celda en blanco en la vista de cuadrícula de datos, y si es así, omita imprimiendo el valor y continúe para verificar la siguiente celda.

La ayuda apreció grandemente.

Aquí está el código:

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

que haya olvidado mencionar el problema que está viendo ... –

Respuesta

16

Bueno, que está actualmente comprobando si tamaño de la celda es cero. En una grilla, cada celda de una columna tiene el mismo ancho y cada celda en una fila tiene la misma altura (generalmente, de todos modos).

Desea verificar basándose en el valor de la celda. Por ejemplo:.

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

Tweak esto para cualquier otra representación de los valores "vacías" que le interesan Si hay un montón, es posible que desee escribir un método específico para esto, y lo llaman en el cheque :

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

¿no tenemos los programadores C# generalmente quedamos lejos de continuar/ir a st atements? Entiendo que tienen su lugar en algunos idiomas y podrían usarse para salirse con la suya con cosas desagradables ... pero personalmente nunca he necesitado usar una declaración de continuación para algo como los ejemplos anteriores. –

+9

No, creo que continuar y romper están bien, aunque nunca he usado goto. En particular, no me gustaría simplemente invertir la condición y poner todo en otro bloque: el anidamiento se vuelve loco en comparación con la simplicidad de "No quiero hacer nada más en esta iteración si se cumple esta condición". –

4

No es necesario utilizar la palabra clave aquí siguen, usted podría hacer esto:

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 
    } 
} 

Además, usted está mirando si el el tamaño de la celda está vacío. ¿Es esto realmente lo que quieres hacer?

¿Qué errores está obteniendo?

2

¿No debería estar revisando si el valor de la celda está vacío, no el tamaño?

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

quiero leer única célula [1] de datos ... 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()); 
    } 
}