Visual Basic.NET - Invisibilizar contenido de celda en columna especifica de DataGridView

 
Vista:
Imágen de perfil de Claudio Barral
Val: 3
Ha disminuido su posición en 4 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Claudio Barral (5 intervenciones) el 12/09/2019 18:12:40
Buenas tardes a todos.

La consulta es ver como puedo recorrer con un bucle el contenido de columnas especificas de un DGV y aquellas Celdas que contengan como valor 0 (Cero), no sean visibles. Son tres o cuatro columnas que ese bucle debiera recorrer e ir verificando que las celdas que tengan 0 sean invisibles. (Ojo, no quiero que elimine el contenido, solo que no se vea en la celda). Esto debiera hacerlo en por lo menos 3 o 4 columnas distintas del DGV.

1
2
3
4
5
6
7
8
For Each Row As DataGridViewRow In Me.DataGridView1.Rows
Dim Valor As Integer = Row.Cells("Neto").Value
If Valor = 0 Then
 
"AQUI EL CODIGO"
 
End If
Next

Por ejemplo en la columna "Neto", todas aquellas celdas que tengan Cero como valor, el mismo no aparezca.

Desde ya muchas gracias por la posible ayuda.

Saludos.
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 Phil Rob
Val: 1.827
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Phil Rob (441 intervenciones) el 13/09/2019 22:26:56
Hola,

Quizá que el codigo seguiente pede te ayudar :

1
2
3
4
5
6
7
If Valor = 0 Then
 
DatagridView1.Item("Neto", Row.RowIndex).Style.ForeColor = Color.White
' o si usa otros colores :
'  DatagridView1.Item("Neto", Row.RowIndex).Style.ForeColor = DatagridView1.Item("Neto", Row.rowIndex).Style.BackColor
 
End If

Espero te dar una buena idea ...
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 Claudio Barral
Val: 3
Ha disminuido su posición en 4 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Claudio Barral (5 intervenciones) el 14/09/2019 13:10:28
Muchas gracias Phil Rob.
Voy a probar y te comento.
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 Claudio
Val: 3
Ha disminuido su posición en 4 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Claudio (5 intervenciones) el 15/09/2019 03:48:06
Hola Phil Rob. Primero que nada disculpas por la demora en contestar.
Estuve probando lo que me pasaste y no funciona desde donde originalmente se lanza el codigo. (En Modulo con un Public Sub).
Algo si hizo cuando puse este código en el evento CellFormatting del DGV, pero como lleva condicionales me daba error.Te adjunto el código y quizás puedas notar algo. Desde ya, muy agradecido por la ayuda.

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
26
Public Sub Evalua()
    With My.Forms.FrmRegistrosCompras
        If .cmbCuenta.Text = "MATERIA PRIMA" Then
            dr("Materia_Prima") = CDec(.txtNeto.Text)
            dr("Neto") = 0
            dr("Gasto_Fabric") = 0
 
            For Each Row As DataGridViewRow In .DataGridView1.Rows
                Dim Valor As Integer = Row.Cells("Neto").Value
                If Valor = 0 Then
                    .DataGridView1.Item("Neto", Row.Index).Style.ForeColor = .DataGridView1.Item("Neto", Row.Index).Style.BackColor
                    .DataGridView1.Item("Gasto_Fabric", Row.Index).Style.ForeColor = .DataGridView1.Item("Gasto_Fabric", Row.Index).Style.BackColor
                End If
            Next
 
        ElseIf .cmbCuenta.Text = "GASTO DE FABRICACION" Then
            dr("Materia_Prima") = 0
            dr("Neto") = 0
            dr("Gasto_Fabric") = CDec(.txtNeto.Text)
        Else
            dr("Materia_Prima") = 0
            dr("Neto") = CDec(.txtNeto.Text)
            dr("Gasto_Fabric") = 0
        End If
    End With
End Sub

Este código va dentro de otro que arma el DGV , DataTable mediante y crea una nueva DataRow.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Public Sub SiOpcion_5_EnBoton_Siguiente_Compras()
    With My.Forms.FrmRegistrosCompras
        If Opcion = 5 Then
            Dim dt As New DataTable
            If .DataGridView1.RowCount >= 0 Then
                If (IsNothing(dt)) Then
                    dt.Columns.Add("Id_Mes_Año", GetType(Integer))
                    dt.Columns.Add("Registro", GetType(Integer))
                    dt.Columns.Add("Fecha", GetType(Date))
                    dt.Columns.Add("Razon_Social", GetType(String))
                    dt.Columns.Add("CUIT", GetType(String))
                    dt.Columns.Add("Comprobante", GetType(String))
                    dt.Columns.Add("Numero", GetType(String))
                    dt.Columns.Add("Materia_Prima", GetType(Decimal))
                    dt.Columns.Add("Gasto_Fabric", GetType(Decimal))
                    dt.Columns.Add("Cuenta", GetType(String))
                    dt.Columns.Add("Neto", GetType(Decimal))
                    dt.Columns.Add("IVA", GetType(Decimal))
                    dt.Columns.Add("Total", GetType(Decimal))
                    dt.Columns.Add("Cod_Proveedor", GetType(Integer))
                    dt.Columns.Add("Cod_Cuenta", GetType(Integer))
                    dt.AcceptChanges()
                    .DataGridView1.Columns.Clear()
                    .DataGridView1.DataSource = dt
 
                    dr = dt.NewRow()
                    dr("Id_Mes_Año") = CInt(.lblCodMesAno.Text)
                    dr("Registro") = CInt(.lblRegNro.Text)
                    dr("Fecha") = .DateTimePicker1.Value.ToShortDateString
                    dr("Razon_Social") = .cmbProveedor.Text
                    dr("CUIT") = .lblCuit.Text
                    dr("Comprobante") = .cmbComporobante.Text
                    dr("Numero") = .MaskedTextBox1.Text
                    Call Evalua()
                    'dr("Materia_Prima") = CDec(.txtNeto.Text)
                    'dr("Gasto_Fabric") = CDec(.txtNeto.Text)
                    dr("Cuenta") = .cmbCuenta.Text
                    'dr("Neto") = CDec(.txtNeto.Text)
                    dr("IVA") = CDec(.lblIvaImporte.Text)
                    dr("Total") = CDec(.lblValTotal.Text)
                    dr("Cod_Proveedor") = CInt(.lblCodProveedor.Text)
                    dr("Cod_Cuenta") = CInt(.lblCodCuenta.Text)
                    dt.Rows.Add(dr)
                    dt.AcceptChanges()
                Else
                    dt = TryCast(.DataGridView1.DataSource, DataTable)
                    dr = dt.NewRow()
                    dr("Id_Mes_Año") = CInt(.lblCodMesAno.Text)
                    dr("Registro") = CInt(.lblRegNro.Text)
                    dr("Fecha") = .DateTimePicker1.Value.ToShortDateString
                    dr("Razon_Social") = .cmbProveedor.Text
                    dr("CUIT") = .lblCuit.Text
                    dr("Comprobante") = .cmbComporobante.Text
                    dr("Numero") = .MaskedTextBox1.Text
                    Call Evalua() '<-- Public Evalua
                    'dr("Materia_Prima") = CDec(.txtNeto.Text)
                    'dr("Gasto_Fabric") = CDec(.txtNeto.Text)
                    dr("Cuenta") = .cmbCuenta.Text
                    'dr("Neto") = CDec(.txtNeto.Text)
                    dr("IVA") = CDec(.lblIvaImporte.Text)
                    dr("Total") = CDec(.lblValTotal.Text)
                    dr("Cod_Proveedor") = CInt(.lblCodProveedor.Text)
                    dr("Cod_Cuenta") = CInt(.lblCodCuenta.Text)
                    dt.Rows.Add(dr)
 
                    Dim dv As New DataView
                    dv = dt.DefaultView
                    dv.Sort = "Fecha ASC, Numero ASC"
                    .DataGridView1.DataSource = dv.ToTable()
                End If
            End If
        End If
        Call ConfiguraDGVyLabelsEnFrmRegistrosCompras()
    End With
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 Phil Rob
Val: 1.827
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Phil Rob (441 intervenciones) el 15/09/2019 21:15:56
Hola,

Probablemente que la corrección es :

1
2
3
4
5
6
7
8
9
10
'…
Dim UnColor As Color = DataGridView1.DefaultCellStyle.BackColor
For Each Row As DataGridViewRow In .DataGridView1.Rows
    Dim Valor As Integer = Row.Cells("Neto").Value
    If Valor = 0 Then
        .DataGridView1.Item("Neto", Row.Index).Style.ForeColor = UnColor
        .DataGridView1.Item("Gasto_Fabric", Row.Index).Style.ForeColor = UnColor
    End If
Next
'…

En mi probas, este funciona (vista el video : https://www.dropbox.com/s/4cpd2v5bg6brov9/DGV.mp4?dl=0)
Adjunto mi proyecto para testar (TestDataGrid2.zip). Mi código es un poco diferente.

Buena tarde
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

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Claudio Barral (5 intervenciones) el 16/09/2019 03:00:16
Muchas Gracias Phil.
Ahi estuve probando y por ahora no hace lo que debiera, de todos modos vi Tu video y vere si quizas cambiando detalles logre que funcione.
Aplicando las lineas de código que me pasaste, no funciona. La verdad no se que estoy haciendo mal. Ya probé mil cosas y lo que propones, me parece totalmente lógico y debiera funcionar, pero bueno, no es este el caso.
El tema es que al intentar ingresar la primera Row me da error (aplicando el código del Video), porque el DGV esta vacio. por eso estare viendo con atención como poder corregir esto.
Insisto en agradecerte enormemente toda la colaboración que dispensas. Lo que logre, te lo voy a contar.
Abrazo.
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 Phil Rob
Val: 1.827
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Phil Rob (441 intervenciones) el 16/09/2019 11:23:50
Hola,

No tengo el tiempo ahora, quizá miraré en la tarde.

"porque el DGV esta vacio.", para este, usas Try Catch

Salutos,
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 Richard
Val: 51
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Richard (13 intervenciones) el 17/09/2019 22:23:44
Hola, nunca es tarde para seguir aprendiendo.
En mis años de programador, jamás tuve la necesidad de ocultar una celda de un datagrid, y a mi criterio personal, esto es imposible de hacer, si se puede ocultar filas, columnas pero de ahí a que se pueda ocultar solo una celda, no tiene lógica.

Como te indicaron, deberías de validar si esa celda tiene un valor 0, reemplazar por "" así solucionaría.
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

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Claudio Barral (5 intervenciones) el 18/09/2019 14:11:01
Muchas gracias Richard por tu comentario. Ocurre que las celdas aportan a una Suma por columna según a la Cuenta a que pertenezcan C/U.
O sea, la cuenta Materia prima, la cuenta Gastos de Fabricación, la cuenta Varios, etc., el hecho de poner " " lleva a un error al momento de sumar.
Fijate que cada vez que ingreso una Row, pasa convertida en Cdec, Ej: dr("Materia_Prima") = CDec(.txtNeto.Text).

Lógicamente esto va a ser guardado después a un tabla de una DB.
Bueno, no se, seguiré viendo. Desde ya, muchas gracias por tu aporte.
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 Richard
Val: 51
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Invisibilizar contenido de celda en columna especifica de DataGridView

Publicado por Richard (13 intervenciones) el 18/09/2019 14:16:40
Bien, es muy sencillo.
Para mostrar en el gris, lo reemplaza por "" y al momento de guardar en tabla pones su valor que es cero y haces la suma.
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