viernes, marzo 29, 2024

Como podemos ocultar una columna del DataGrid

Descargar Ejemplo DataGrid_OcultarColumna.zip

En algún momento en nuestras aplicaciones necesitaremos tener algun dato en el DataGrid, pero que este no se le muestre al usuario, ya sea por razones de seguridad, que el dato no sea relevante o que necesitemos ahorrar espacio en pantalla, o muchas otras mas. Para esto es que te explicamos como puedes agregarle esta propiedad a tu DataGrid.

DataGrid normal

DataGrid luego de utilizar la propiedad de ocultar columna, manteniendo los datos en el DataSource

La columna del DataGrid tiene una propiedad ColumnMapping a la cual le podemos definir el estado MappingType.Hidden

ds.Tables(nombre_tabla).Columns( _
nombre_columna_ocultar).ColumnMapping = MappingType.Hidden

Para hacer esto y tener un control personalizado vamos a crear la clase DataGridEx a la cual le vamos a copiar el siguiente código:

Imports System.ComponentModel
Imports System.Windows.Forms

Public Class DataGridEx
Inherits System.Windows.Forms.DataGrid

#Region » Windows Form Designer generated code «

'UserControl overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer

'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Private Sub InitializeComponent()
components = New System.ComponentModel.Container
End Sub

#End Region

'Procedimiento que puede ser invocado para ocultar ona columna
Public Sub OcultarColumna( _
ByVal nombre_columna_ocultar As String, _
Optional ByVal nombre_tabla As String = «»)

Try

If nombre_columna_ocultar.Trim.Length = 0 Then
Throw New Exception(«Debe indicar el nombre de la columna»)

Else

'Identificamos el tipo del objeto DataSet o DataTable
If Me.DataSource.GetType.Name = «DataTable» Then
Dim dt As New DataTable
dt = CType(MyBase.DataSource, DataTable)
MyBase.DataSource = Nothing
Me.DataSourceEx(nombre_columna_ocultar, nombre_tabla) = dt

ElseIf Me.DataSource.GetType.Name = «DataSet» Then
Dim ds As New DataSet
ds = CType(MyBase.DataSource, DataSet)
MyBase.DataSource = Nothing
Me.DataSourceEx(nombre_columna_ocultar, nombre_tabla) = ds

End If

End If
Catch ex As Exception
Throw ex
End Try
End Sub

Public Shadows Property DataSourceEx( _
Optional ByVal nombre_columna_ocultar As String = «», _
Optional ByVal nombre_tabla As String = «») As Object
Get
Return MyBase.DataSource
End Get
Set(ByVal Value As Object)

If nombre_columna_ocultar.Trim.Length > 0 Then

'Identificamos el tipo del objeto DataSet o DataTable
If Value.GetType.Name = «DataTable» Then
Dim dt As New DataTable
dt = Value
dt.Columns(nombre_columna_ocultar).ColumnMapping = MappingType.Hidden
MyBase.DataSource = dt

ElseIf Value.GetType.Name = «DataSet» Then
Dim ds As New DataSet
ds = Value

If nombre_tabla.Trim.Length > 0 Then
ds.Tables(nombre_tabla).Columns( _
nombre_columna_ocultar).ColumnMapping = MappingType.Hidden
MyBase.DataSource = ds
MyBase.DataMember = nombre_tabla

Else
ds.Tables(0).Columns( _
nombre_columna_ocultar).ColumnMapping = MappingType.Hidden
MyBase.DataSource = ds

End If

End If

Else
MyBase.DataSource = Value

If nombre_tabla.Trim.Length > 0 And Value.GetType.Name = «DataSet» Then
MyBase.DataMember = nombre_tabla
End If

End If
End Set
End Property

End Class

Una ves terminada esta clase podremos utilizarla en nuestro formulario, donde de una forma sencilla y práctica utilizamos nuestro propio DataGrid

Para enviarle los datos podemos hacerlo de varias formas, donde le podemos indicar desde el inicio cual tabla mostrar y también cual columna ocultar

'Cuando es dataset le podemos indicar el nombre de la tabla que queremos mostrar, datos son opcionales
Me.dg1.DataSourceEx(«Valor», «Prueba») = MyDataSet
'Si es datatable le indicamos la columna que queremos ocultar, dato es opcional
Me.dg1.DataSourceEx(«Valor») = dt
'Solo le indicamos la tabla que queremos mostrar
Me.dg1.DataSourceEx(nombre_tabla:=»Prueba») = MyDataSet
'Solo le enviamos la tabla como al DataSource normal
Me.dg1.DataSourceEx = dt

También podremos ya una ves cargados los datos indicarle cual colum queremos ocultar con la función

Me.dg1.OcuarColumna(«Valor», «Prueba»)

Descargar Ejemplo DataGrid_OcultarColumna.zip

Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub
Roy Rojas
Roy Rojashttp://www.dotnetcr.com
Con más de 20 años de experiencia en programación, experto en lenguajes .NET, VB, C#, ASP.NET, Xamarin, XCode, DBA en SQL Server. Creador de dotnetcr.com, sitio web para programadores en español. royrojas.com | dotnetcr.com | GitHub