Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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,
-
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:
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 :)
-
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?
-
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 ???