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
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.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.
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
Me.dg1.DataSourceEx(«Valor», «Prueba») = MyDataSet
Me.dg1.DataSourceEx(«Valor») = dt
Me.dg1.DataSourceEx(nombre_tabla:=»Prueba») = MyDataSet
Me.dg1.DataSourceEx = dt
También podremos ya una ves cargados los datos indicarle cual colum queremos ocultar con la función