Porqué falla la misma función en un formulario

Veréis tengo una aplicación en el que tengo el formulario principal con un ComboBox desde el que llamo a los formulario según necesidades, tengo este código

TextBox4.Text = DataGridView1.Item(0, DataGridView1.CurrentRow.Index).Value
TextBox3.Text = DataGridView1.Item(1, DataGridView1.CurrentRow.Index).Value
TextBox2.Text = DataGridView1.Item(2, DataGridView1.CurrentRow.Index).Value
TextBox1.Text = DataGridView1.Item(3, DataGridView1.CurrentRow.Index).Value

Que pongo en el DataGridView con el que marco una fila y me para el registro a los TextBox que tengo (todos los formularios son iguales, tienen las mismas cosas y hacen las mismas funciones (en realidad todos son copiados del segundo formulario)) en todos funciona correctamente excepto en el 4º formulario que me da error al marcar la fila y no se porque me da ese error si ha sido copiado de otro formulario y todo está en el mismo orde, este es el error que me da y me señala esta línea de código, y como digo en todos funciona correctamente.

TextBox3.Text = DataGridView1.Item(1, DataGridView1.CurrentRow.Index).Value

No se controló InvalidCastException

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

1 Respuesta

Respuesta
1

Esta excepción se debe a que el valor que te está devolviendo DataGridView1. Item(1, DataGridView1. CurrentRow. Index).Value es null y no puede convertirse a string. Revisa que esa celda exista en ese DataGridView1 y que tenga datos en ella.

Pon un punto de interrupción y fíjate que valores toma exactamente DataGridView1. CurrentRow. Index y busca la posición en el grid para comprobar lo que te dije anteriormente.

Si el valor de esa celda puede ser nulo entonces tendrás que ejecutar alguna condicional antes de asignarle el valor al TextBox3.Text. En sería algo así como

Si (DataGridView1. Item(1, DataGridView1. CurrentRow. Index).Value es null)

TextBox3.Text = “”;

Si no

TextBox3.Text = DataGridView1.Item(1, DataGridView1.CurrentRow.Index).Value

Saludos

Jorge Garcia Suárez

¡Gracias! Lo probare en cuanto pueda y te diré algo

Efectivamente la celda no tenía nada(que no tiene que tenel) pero le he puesto unas rayas y listo.

Me puedes decir alguna forma de que aunque una celda está en blanco no salga error?

Gracias

Bueno para esto depende de tu código y de la forma que quieras hacerlo. Puedes simplemente tener en cuenta si esta vacía y controlarlo como te explique anteriormente.

Si (DataGridView1. Item(1, DataGridView1. CurrentRow. Index).Value es null)

TextBox3.Text = “lo que quieres que muestre”;

O podrías tenerlo en cuenta desde el método que utilizas para llenar el grid y simplemente ponerle un espacio en blanco en caso de que este vacía la celda o algo así. Ya eso depende de tu código como te decía anteriormente.

¡Gracias! Otra pregunta como podria hacer para que al púlsar una fila del DataGridView y pasarme los datos de esa fila a los TextBox me inutilizara el Botón4 (que puesto por nombre Guardar).

Saludos

No entiendo bien tu pregunta. Quieres que en tu código además de llenar los textbox también te deje el botón "inutilizable"

Si es eso simplemente accede a la propiedad del botón.enable = false; en el mismo lugar donde le asignas los valores a los textbox.

¿

¿Entendí bien?

Te explico bien, tengo un DataDridView, 4 TextBox y 3 Botones, (Guardar, Modificar y Eliminar) y lo que quiero es que cuando alguno pase datos del DataGridView a los TextBox y modifique un dato pueda estar seguro que pulsa el botón Modificar ó Eliminar, pero no el de Guardar porque no quiero que me repita la fila con algún dato modificado (lo que quiero es que pulsé el Botón Modificar) para que guarde el o los datos Modificados sustituyendo la fila antigua por la nueva modificada.

Por eso necesitaría saber como hacer para que al marcar una fila del DataGridView y me pase lo Dato a los TextBox al mismo tiempo me inhabilite el Botón Guardar.

Espero haberme explicado bien,

Saludos

Cuando digo inhabilitar el Botón para que no se equivoquen, quiero decir inhabilitarlo hasta que los TextBox estén en blanco, pero que en caso necesasio que se se pueda escribir nuevos datos (en los cuatro TextBox, por eso he dicho inhabilitarlo cuando al pulsar una fila del DataGridView me pase los datos a los TextBox.

saludos

Ok

Mira. Te explico que para deshabilitar un botón o prácticamente cualquier herramienta de visual estudio debes acceder a su propiedad "enable". Esto hace que si le das valor "false" puedas ver el botón pero no está habilitado. En c# la línea de código te quedaría así

boton1.enable = false;

¿

? ¿En tu caso como lo usarías?

Puedes poner condicionales.

Si (modificar)

{

botonEliminar.enable = false;

botonGuardar.enable = false;

}

Sería una forma. También puedes usar la propiedad visible, lo que esta simplemente no te muestra el botón hasta que la pongas en true.

botonGuardar.visible = false;

O

botonGuardar.visible = true; 

Ahora una cosita más. No se las características de lo que estás haciendo pero me parece que estás trabajando con las funciones básicas de manejo de datos porque me dices que tienes botón Modificar, Eliminar, Guardar. Y al parecer lo trabajas todo desde la misma página o Form (debe ser form porque me pones DataGridView). Entonces es simplemente una cuestión de diseño pero puedes quitarte el botón modificar y unirlo todo en el de guardar. Simplemente debes hacer una pregunta al empezar el código del botón

Si (modificar)

{

Hacer esto

}

else

{

Insertar nuevo

}

Saludos

Jorge Garcia Suárez

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas