Visual Basic.NET - Completar una celda DatagridviewCheckboxcell por código?

 
Vista:
sin imagen de perfil
Val: 93
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Completar una celda DatagridviewCheckboxcell por código?

Publicado por María Inés Burgos (49 intervenciones) el 13/11/2018 16:01:03
Buenos días! Me ha surgido un error que no sé resolver (pero al menos lo tengo identificado!)
Tengo un datagridview no enlazado (en el formulario padre) el cual relleno con registros provenientes de diferentes datagridview de distintos formularios hijos.
Busqué la manera correcta de hacerlo y di con una explicación respecto a Interfaces, que me funciona perfecto. Y que pondré a continuación.
Mi problema es con la columna checkbox que tiene mi Datagridview destino (en el padre). Si paso este valor como Booleano = False (para que no me lo pase seleccionado desde el hijo, que también tiene una columna de este estilo) cuando quiero hacer click y seleccionar (por ejemplo para borrar el ítem si el usuario agregó un ítem por error, para removerlo del datagrid padre) en este Datagridview me dice que no puede convertir el tipo False en Long (me da error el evento cellcontentclick digamos). Si paso la columna checkbox con el valor de la columnackeck box de dónde proviene el dato (hijo), no hay ningún problema, pero la casilla me queda seleccionada como es lógico.
Es decir, infiero que el problema está cuando quiero cargar por código esa columna como False en lugar de pasarle el valor de la columna check del hijo. Pero no sabría cómo hacerlo de otra manera, dado que necesito poder añadir por código otras filas NO provenientes de Datagridviews, por lo cual esa columna he de completarla de alguna manera.
Aquí va el código e indico en el mismo cuál es el problema por si la explicación es confusa, ya que de por sí lo que hago si uno no lo ve puede ser confuso.

FORMULARIO PADRE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Partial Public Class Frm_Liquidacion
    Inherits Form
    Implements IAddItem
    Public Sub New()
        InitializeComponent()
    End Sub
 
#Region "IAddItem Members"
 
    Public Sub AddNewItem(ByVal row As DataGridViewRow) Implements IAddItem.AddNewItem
        Dim Seleccionar As Boolean = row.Cells("Seleccionar").Value 'así funciona perfecto, dado que me pasa el check
' desde la columna seleccionar del otro Datagridview que está en el hijo. 
'El inconveniente es si pongo FALSE. O sea al reemplazar esta línea por:
'Dim Seleccionar As Boolean = False
'Pero necesito que no me quede seleccionado y 
'además en otra situación donde ingreso la fila SIN provenir de un datagrid, 
'no sé cómo completar esta columna para que no me tire error.
        Dim IdGasto As String = row.Cells("IdGasto").Value.ToString()
        Dim Concepto As String = row.Cells("Concepto").Value.ToString()
        Dim Debe As String = row.Cells("Importe").Value.ToString()
        Dim Haber As String = String.Empty
 
        Me.DGV_Liquidacion.Rows.Add(New String() {Seleccionar, IdGasto, Concepto, Debe, Haber})
 
    End Sub

Aquí el código del formulario HIJO:

1
2
3
4
5
6
7
8
9
10
Private Sub BTN_Seleccionar_Click(sender As Object, e As EventArgs) Handles BTN_Seleccionar.Click
  ' Se recorre cada registro de la grilla de origen
        For Each row As DataGridViewRow In DGV_Gastos.Rows
            ' Se recupera el campo que representa el checkbox, y se valida la seleccion
            If row.Cells("Seleccionar").Value <> Nothing Then
                Dim parent As Frm_Liquidacion.IAddItem = TryCast(Me.Owner, Frm_Liquidacion.IAddItem)
                parent.AddNewItem(row)
            End If
        Next
End Sub

El conflicto viene con este evento del Datagridview en el formulario PADRE:

1
2
3
4
5
6
Private Sub DGV_Liquidacion_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV_Liquidacion.CellContentClick
        If e.ColumnIndex = Me.DGV_Liquidacion.Columns.Item(0).Index Then
            Dim chkCell As DataGridViewCheckBoxCell = Me.DGV_Liquidacion.Rows(e.RowIndex).Cells(0)
            chkCell.Value = Not chkCell.Value
        End If
    End Sub

Como el casillero si lo cargo por código, es decir sin pasar el valor de la columna "seleccionar", tiene un "False" me dice que no lo puede convertir y da error la línea "chkCell.Value = Not chkCell.Value"

System.InvalidCastException: 'La conversión de la cadena "False" en el tipo 'Long' no es válida.'

Podría pasar el valor y luego agregar alguna otra línea que "des-seleccione" los ítems, pero el problema es que necesito agregar otras filas mediante unos inputbox (por situaciones que pueden no estar contempladas) y ahí necesito ingresar por código un valor a esa columna y bueno, aparecería este error porque no sé cómo hacerlo.
Espero haber sido medianamente clara porque es un poco embrollado todo. Desde ya muchísimas gracias por siempre ser tan amables y ayudarme. Soy novata en esto y me suelo trabar!

Saludos a todos!
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
sin imagen de perfil
Val: 93
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Completar una celda DatagridviewCheckboxcell por código?

Publicado por María Inés Burgos (49 intervenciones) el 13/11/2018 18:44:15
Bueno, seguí intentando y hallé una solución. Ustedes me dirán si es una "chanchada" o es válida (porque tengo todo el pálpito que es una chanchada), pero así ya no me da error.

1
2
3
4
5
6
7
8
9
10
Private Sub DGV_Liquidacion_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV_Liquidacion.CellContentClick
    If e.ColumnIndex = Me.DGV_Liquidacion.Columns.Item(0).Index Then
        Dim chkCell As DataGridViewCheckBoxCell = Me.DGV_Liquidacion.Rows(e.RowIndex).Cells(0)
        If chkCell.Value.ToString = "False" Then
            DGV_Liquidacion.Rows(e.RowIndex).Cells(0).Value = True
        Else
            DGV_Liquidacion.Rows(e.RowIndex).Cells(0).Value = False
        End If
    End If
End Sub
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 Wilfredo Patricio Castillo
Val: 1.239
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Completar una celda DatagridviewCheckboxcell por código?

Publicado por Wilfredo Patricio Castillo (720 intervenciones) el 13/11/2018 21:58:44
Pruébalo así:

1
2
3
4
5
If Convert.toBoolean(chkCell.Value) =False Then
    DGV_Liquidacion.Rows(e.RowIndex).Cells(0).Value = True
Else
    DGV_Liquidacion.Rows(e.RowIndex).Cells(0).Value = False
End If


Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 93
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Completar una celda DatagridviewCheckboxcell por código?

Publicado por María Inés Burgos (49 intervenciones) el 13/11/2018 22:27:34
Muchas gracias Wilfredo por mejorar mi código! Anda de 10! Siempre tan amable! saludos para tí también!!
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