2011-08-03 64 views
5

¿Cómo puedo recorrer las filas de DataGridView a la vez (tengo 2 columnas) y almacenar esas 2 columnas en una variable que utilizaré como parámetro para una consulta SQL?¿Cómo puedo obtener los valores de la fila DataGridView y almacenar variables?

foreach (DataGridViewRow Datarow in contentTable_grd.Rows) 
      { 
       contentValue1 = Datarow.Cells[0].Value.ToString(); 
       contentValue2 = Datarow.Cells[1].Value.ToString(); 

       SqlParameter param4 = new SqlParameter("@contentTableValue1", contentValue1); 
       SqlParameter param5 = new SqlParameter("@contentTableValue2", contentValue2); 

      } 

que estoy recibiendo este error cuando se utiliza el código anterior -

referencia a objeto no establecida como instancia de un objeto.

+0

¿Qué estás queriendo hacer que su código no logra? –

+0

@andrewcooper Tengo 2 columnas y para cada fila quiero obtener esos valores y almacenarlos en una variable que luego se insertará en una base de datos y luego pasará a la siguiente fila. –

+0

¿Qué línea está dando el error? ¿Existe 'contentTable_grd'? –

Respuesta

3

encontrado el problema que necesitaba una sentencia if para evitar que las células vacías de pasar por

foreach (DataGridViewRow Datarow in contentTable_grd.Rows) 
    { 
     if (Datarow.Cells[0].Value != null && Datarow.Cells[1].Value != null) 
     { 
      contentValue1 = Datarow.Cells[0].Value.ToString(); 
      contentValue2 = Datarow.Cells[1].Value.ToString(); 
      MessageBox.Show(contentValue1); 
      MessageBox.Show(contentValue2); 
     } 

    } 
+1

Buena captura. Una cosa que podría considerar, que a veces DESEA pasar valores nulos a su procedimiento ... También - revise string.isnullorempty() como un posible reemplazo para! = NULL ... – Chains

1

¿Qué es contentValue1?

No estoy seguro acerca de C# - ¿puede escribir implícitamente la variable? Tal vez intente algo como string contentvalue1 = ...

También, dependiendo de qué tipo de control podría estar en la celda ... usted puede hacer algo como

string contentvalue1 = CTYPE(DataRow.FindControl("myTextbox"),textbox).text

5

El problema más probable es que la una o las dos de la La celda a la que hace referencia contiene un valor nulo y la excepción se produce cuando intenta llamar al ToString() en dicha celda.

Una solución es utilizar el ?? operator para devolver un valor predeterminado para el parámetro si un valor de celda es nulo:

contentValue1 = Datarow.Cells[0].Value ?? string.Empty; 
contentValue2 = Datarow.Cells[1].Value ?? string.Empty; 

Este código devolverá una cadena vacía si el valor de una celda es nulo; es posible que desee utilizar un valor predeterminado diferente.

Cuestiones relacionadas