Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Mary en 11 de Octubre 2014, 11:45

Título: ocultar columnas vacias en datagridview Visual Basic
Publicado por: Mary en 11 de Octubre 2014, 11:45
Hola,
estoy intentando que en un datagridview, las columnas que están completamente vacías (a excepción del nombre del campo) se mantengan ocultas. Tengo un datagridview que está asociado a algunas tablas de una base de datos Access.
Según la tabla que importo desde la base de datos, aunque los nombres y el número de columnas es siempre el mismo, hay veces que hay columnas que están vacías y otras que están llenas. Básicamente lo que se muestra en el datagridview es lo siguiente:

Columna 1   Columna 2   Columna 3   Columna 4
      1                                                      36
                        45                                  45
      2                 37                                105
      4                                                     205

según el ejemplo anterior, lo que estoy intentando sería que en el datagridview aparecieran solamente las Columnas 1, 2 y 4. Mientras que la Columna 3 debería permanecer oculta.
Bueno para ello, he hecho el siguiente código para cada una de las columnas:

   DataGridView11.Columns("Columna1").Visible = False

            Dim ira As Boolean
            Dim i As Integer
            For i = 0 To DataGridView11.Rows.Count - 1
            If IsDBNull(DataGridView11.Rows(i).Cells("Columna1").Value) Then
                    ira = False
                    DataGridView11.Columns("Columna1").Visible = False
                   
                Else
                    ira = True
                    Exit For
                End If
            Next i

            If ira Then

                DataGridView11.Columns("Columna1").Visible = True

            End If


Primero lo que digo es que todas las columnas estén ocultas (DataGridView11.Columns("Columna1").Visible = False)

Después le indico que recorra las filas de esa columna (For Next) y que cuando encuentre un valor, entonces  debe hacer que la columna sea visible (DataGridView11.Columns("Columna1").Visible = True) y que se detenga (Exit For).
Lo que sucede es que no consigo que me salga y no tengo ni idea de que estoy haciendo mal. ¿Alguien sabría que código se debe utilizar para conseguir esto? Gracias.
Saludos,
 




Título: Re:ocultar columnas vacias en datagridview
Publicado por: Mastermind en 12 de Octubre 2014, 20:45
Aquí he encontrado una propuesta que parece resuelve lo que quieres hacer.

El código con el método al que tienes que llamar sería el siguiente:

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace MyProject
{
    public static class ExtensionGridView
    {
        public static DataGridView RemoveEmptyColumns(this DataGridView grdView)
        {
            foreach (DataGridViewColumn clm in grdView.Columns)
            {
                bool notAvailable = true;
 
                foreach (DataGridViewRow row in grdView.Rows)
                {
                    if (! string.IsNullOrEmpty(row.Cells[clm.Index].Value.ToString()))
                    {
                        notAvailable = false;
                        break;
                    }                   
                }
                if (notAvailable)
                {
                    grdView.Columns[clm.Index].Visible = false;
                }
            }
 
            return grdView;
        }
    }
}

Y para llamarlo tendrías que invocar el método sobre el datagridview al que quieras aplicárselo, por ejemplo:

DataGridView11.RemoveEmptyColumns();

Ya nos contarás si te funciona  :)
Título: Re:ocultar columnas vacias en datagridview
Publicado por: Mary en 13 de Octubre 2014, 14:01
Hola,
gracias por responder. He probado el código pero todo me sale con errores. He probado a introducirlo en un modulo, pero tengo lo mismo. Cuando pongo 'Using' me sale error, debo sustituirlo por 'Imports' y la función 'Foreach' también me la indica como error. Seguro es una pregunta muy tonta, pero ¿este código es para Visual Basic?
Título: Re:ocultar columnas vacias en datagridview
Publicado por: Mastermind en 13 de Octubre 2014, 20:32
Tienes razón, creo que el código es para C#, por lo que para usarlo en Visual Basic habría que adaptarlo, perdona por el error   ???