Visual Basic.NET - Error en un DataGridView con evento CellClick

   
Vista:
Imágen de perfil de nano

Error en un DataGridView con evento CellClick

Publicado por nano (20 intervenciones) el 25/08/2015 22:20:17
Muy buenas a todos.
En mi nuevo proyecto tengo un datagrid que muestra los datos de una tabla de productos.
La idea es que cuando yo pinche en un artículo cualquiera de ese datagrid me los lleve a sus textbox para poder editarlos.
Hasta aquí casi todo bien, pero mi problema aparece en concreto con una sola línea de todos mis datagrid que sale en blanco, sin datos algunos y que cuando pincho me aparece un error DBNull....
Entiendo que el error se genera al intentar llevar los datos seleccionados que estan Null a cada uno de sus textbox... El codigo para generar el evento es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub DGDatos_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGDatos.CellClick
        TextIdProducto.Enabled = True
        TextIdProducto.Text = DGDatos.SelectedCells.Item(1).Value
        TextNombreProducto.Text = DGDatos.SelectedCells.Item(2).Value
        TextDescripcionProducto.Text = DGDatos.SelectedCells.Item(3).Value
        TextPrecioVenta.Text = DGDatos.SelectedCells.Item(4).Value
        TextPrecioCompra.Text = DGDatos.SelectedCells.Item(5).Value
        TextStock.Text = DGDatos.SelectedCells.Item(6).Value
 
        imagen.BackgroundImage = Nothing
        Dim b() As Byte = DGDatos.SelectedCells.Item(7).Value
 
        Dim ms As New IO.MemoryStream(b)
 
        imagen.Image = Image.FromStream(ms)
        imagen.SizeMode = PictureBoxSizeMode.StretchImage
 
        BtnGrabar.Visible = False
        BtnEditar.Visible = True
    End Sub

Porque me aparece ese registro en blanco que no puedo eliminar porque ni siquiera me aparece en el SQL SERVER... Como puedo quitar el citado registro en blanco????
Os dejo un par de imagenes para que veais mejor el problema.
Muchas gracias de antemano y un saludo,
Nano.


error_dateluq1
error_dateluq2
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
Imágen de perfil de giancarlo

Error en un DataGridView con evento CellClick

Publicado por giancarlo giangbd5@hotmail.com (280 intervenciones) el 26/08/2015 00:30:53
Imagino que la columna 1 debe estar oculta. tu codigo selectedCell se refiere a las celdas seleccionadas, ahora si tu modo de seleccion es fullrow (o algo asi)al seleccionar una celda seleccionas automaticamente todas las celdas de la fila. sin embargo me deja en duda si selecciona las ocultas.

intenta algo asi

dim iFila as integer=datagridview1.currentcell.rowindex

txtidproducto.text=datagridview1.item("nombre de columna (con comillas)o indice(sin comillas)",iFila).value

si te sale algo de dbnull, puedes probar con ...tucodigo..value.tostring o convert.tostring(codigo.value)
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
Imágen de perfil de nano

Error en un DataGridView con evento CellClick

Publicado por nano (20 intervenciones) el 26/08/2015 02:25:53
Muy buenas Giancarlo,
Efectivamente la columna 1 la tengo ocultada...

Private Sub ocultar_columnas()
DGDatos.Columns(1).Visible = False
End Sub


Realmente si que se seleccionan todas las columnas, estén ocultas dentro del datagrid llamado DGDatos.
De hecho en la imagen que he subido antes, cuando selecciono una fila, en este caso un perfume D&G, todos los registros pasan a sus respectivos textbox e incluso la imagen también. El error me aparece cuando selecciono la ultima fila en blanco que os comento.
Te confirmo el modo de selección que lo tengo en fullrowselect.
Finalmente y mientras escribía, te confirmo que con la opción tostring me ha solventado el error en todos los textbox aunque ahora el error me aparece en el array donde almaceno las imágenes(adjunto imagen):

Private Sub DGDatos_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGDatos.CellClick
TextIdProducto.Enabled = True
TextIdProducto.Text = DGDatos.SelectedCells.Item(1).Value.ToString
TextNombreProducto.Text = DGDatos.SelectedCells.Item(2).Value.ToString
TextDescripcionProducto.Text = DGDatos.SelectedCells.Item(3).Value.ToString
TextPrecioVenta.Text = DGDatos.SelectedCells.Item(4).Value.ToString
TextPrecioCompra.Text = DGDatos.SelectedCells.Item(5).Value.ToString
TextStock.Text = DGDatos.SelectedCells.Item(6).Value.ToString

imagen.BackgroundImage = Nothing
Dim b() As Byte = DGDatos.SelectedCells.Item(7).Value

Dim ms As New IO.MemoryStream(b)

imagen.Image = Image.FromStream(ms)
imagen.SizeMode = PictureBoxSizeMode.StretchImage

BtnGrabar.Visible = False
BtnEditar.Visible = True
End Sub


La otra solución que he encontrado es modificar en las propiedades del datagrid la opcion "AllowUserAddRow" ponerla en false y de este modo desaparece la famosa línea en blanco que en SQL SERVER sale como NULL. Y aunque la traducción pudiera dar lugar a engaños, si que permite seguir añadiendo registros en la tabla.
Si se te ocurre alguna solución para la celda de las imagenes, hazmela saber.
Muchas gracias por todo.
Un saludo,
Nano.


errordgv1
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

Error en un DataGridView con evento CellClick

Publicado por Miguel (346 intervenciones) el 26/08/2015 05:58:41
Hola, lo que haría sería comprobar que existan datos, algo así:

1
2
3
4
5
6
7
imagen.Image= Nothing
If IsNothing(DGDatos.SelectedCells.Item(7).Value)= False then
   Dim b() As Byte = DGDatos.SelectedCells.Item(7).Value
   Dim ms As New IO.MemoryStream(b)
   imagen.Image = Image.FromStream(ms)
   imagen.SizeMode = PictureBoxSizeMode.StretchImage
End If


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
Imágen de perfil de nano

Error en un DataGridView con evento CellClick

Publicado por nano (20 intervenciones) el 28/08/2015 07:49:29
Perfecto... Voy a probar con el condicional... Gracias Miguel!!!
O dejando una imagen siempre por defecto llamada file que sea un png transparente...

Un saludo,
Nano.
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