none
No se encontró InvalidException RRS feed

  • Pregunta

  • Tengo un problema con un proyecto que se titula Sistema de inventario, lo estoy haciendo por capas, por el momento estoy con la clase frmArticulo, pero en especial me sale este error en esta parte:

    private void dataListado_DoubleClick(object sender, EventArgs e)
            {
                this.txtIdarticulo.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["idarticulo"].Value);
                this.txtCodigo.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["codigo"].Value);
                this.txtNombre.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["nombre"].Value);
                this.txtDescripcion.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["descripcion"].Value);

                byte[] imagenBuffer = (byte[])this.dataListado.CurrentRow.Cells["imagen"].Value;
                System.IO.MemoryStream ms = new System.IO.MemoryStream(imagenBuffer);

                this.pxImagen.Image = Image.FromStream(ms);
                this.pxImagen.SizeMode = PictureBoxSizeMode.StretchImage;

                this.txtIdcategoria.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["idcategoria"].Value);
                this.txtCategoria.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["Categoria"].Value);
                this.cbIdpresentacion.SelectedValue = Convert.ToString(this.dataListado.CurrentRow.Cells["idpresentacion"].Value);


                this.tabControl1.SelectedIndex = 1;
            }

    Corre perfecto, pero cuando doy doble clip, me sale esta ventana que dice: 

    byte[] imagenBuffer = (byte[])this.dataListado.CurrentRow.Cells["imagen"].Value;    No se controló InvalidException

    Exception no controlada del tipo 'System.InvalidCastException' en CapaPresentacion.dll

    Informacion adicional: no se puede convertir un objeto de tipo 'System.DBNull' al tipo 'System.Byte[]'.

    alguna sugerencia de ayuda

    lunes, 17 de septiembre de 2018 3:46

Respuestas

  •  no se puede convertir un objeto de tipo 'System.DBNull' al tipo 'System.Byte[]'.

    Eso significa que la celda estaba vacía. Si cargaste el dataListado desde una base de datos, y en el campo Imagen había un NULL, eso se traduce dentro del datatable con el que alimentas al grid en un DBNull, que es un objeto especial que sirve para decirte que ese contenido es nulo.

    Por eso te da un error al convertirlo en byte[], indicando que un DBNull no se puede convertir en array de bytes. Y no, no tiene la inteligencia necesaria para convertir el NULL en un array vacío. Tendrás que meter un "if" para comparar el valor de la celda y solo intentar sacar de ella la imagen si es que contiene una imagen, pero no si está vacía.

    • Marcado como respuesta Pablo Rubio martes, 2 de octubre de 2018 14:54
    lunes, 17 de septiembre de 2018 6:22

Todas las respuestas

  •  no se puede convertir un objeto de tipo 'System.DBNull' al tipo 'System.Byte[]'.

    Eso significa que la celda estaba vacía. Si cargaste el dataListado desde una base de datos, y en el campo Imagen había un NULL, eso se traduce dentro del datatable con el que alimentas al grid en un DBNull, que es un objeto especial que sirve para decirte que ese contenido es nulo.

    Por eso te da un error al convertirlo en byte[], indicando que un DBNull no se puede convertir en array de bytes. Y no, no tiene la inteligencia necesaria para convertir el NULL en un array vacío. Tendrás que meter un "if" para comparar el valor de la celda y solo intentar sacar de ella la imagen si es que contiene una imagen, pero no si está vacía.

    • Marcado como respuesta Pablo Rubio martes, 2 de octubre de 2018 14:54
    lunes, 17 de septiembre de 2018 6:22
  • Una observación para algún moderador. El código indicado por OP está escrito en C# no en VB. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 17 de septiembre de 2018 6:47