Visual Basic.NET - La conversión del tipo 'DBNull' en el tipo 'String' no es válida.

   
Vista:

La conversión del tipo 'DBNull' en el tipo 'String' no es válida.

Publicado por CHristopher cdaversa@hotmail.com (2 intervenciones) el 23/01/2012 23:52:02
tengo un problema con una resta de celdas en un datagridview oajal me puedan ayudar


Private Sub InventarioDataGridView_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles InventarioDataGridView.CellEndEdit

Dim row As DataGridViewRow = InventarioDataGridView.Rows(e.RowIndex)

Dim Costo As Integer

If Not Int32.TryParse(row.Cells("Costo").Value, Costo) Then
Return
End If

Dim Precio As Integer

If Not Int32.TryParse(row.Cells("Precio").Value, Precio) Then
Return
End If

row.Cells("Ganancia").Value = CStr(Precio - Costo)
End Sub

If Not Int32.TryParse(row.Cells("Costo").Value, Costo) Then aca me marca

InvalidCastException was unhandled
La conversión del tipo 'DBNull' en el tipo 'String' no es válida.

desde ya muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

La conversión del tipo 'DBNull' en el tipo 'String' no es válida.

Publicado por CHristopher (2 intervenciones) el 24/01/2012 02:22:27
esto me lo dice cuando intento modificar alguna celda del datagridview
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

La conversión del tipo 'DBNull' en el tipo 'String' no es válida.

Publicado por Damian (824 intervenciones) el 27/01/2012 14:17:54
Se ve que en esa línea del error tienes un campo string y que esta null (nulo), además tiene un integer y eso genera un error de tipos. También estas haciendo una cuenta en string, cuando pones "CStr(Precio - Costo)".
Igual estas usando la función Int32.TryParse(), no me acuerdo que hace, pero por lo que parece es entero, que si bien declaras a Precio y Costo como Integer, esto no esta bien porque ambos pueden tener valores con decimales, deberías declararlos como Decimal.
También te conviene poner un punto de interrupción antes del error y así vas viendo que te esta cargando y como.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

La conversión del tipo 'DBNull' en el tipo 'String' no es válida.

Publicado por apacheco (78 intervenciones) el 19/02/2012 14:03:44
Por lo que veo, el grid lo rellenas con un directamente con un DataSource, que al no existir valores para alguno de los campos seleccionados la rellena con DBNull, que a su vez es imposible de tratar para cconvertirlo a cualquier tipo de variable.

Te prpongo 2 soluciones:

1ª - Convierte los campos obtenidos en el DataSource de forma de que en caso ser Null los conviertas en o si sin numericos o en el caracter blanco.

SELECT campo1, .... , IIF(isNumeric(Campo_Costo), Campo_Costo, 0) AS Costo, ......


2ª - La que yo uso es cargar el datagrid a mano de la sigiuente forma

Selecciono y alineo la celda a rellenar

grid.CurrentCell = grid.Rows(1).Cells(1)
grid.CurrentCell.Style.Alignment = DataGridViewContentAlignmentRight
If isDbNull(rs("Costo") then
grid.CurrentCell = String.Empty
else
grid.CurrentCell.Value = rsAux("cat_id")
endif

Si el String.Empty te diera el mismo problema sustituyelo por el CERO aunque quedara mas feo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar