DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Como podemos ocultar una columna del DataGrid

Por royrojas | 9/27/2005 | Visitas 19,482 | Voto 5.00
En este ejemplo vamos a mostrar como podemos ocultar toda una columna del DataGrid, sin tener que modificar la estructura del DataSet o DataTable
Categorías : VB.NET, Componentes VB.NET
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
Area de Comentarios
Por jossystem - Fecha: 2005/10/24 12:06 PM
es muy interesantes me interesa el codigo ...
Por royrojas - Fecha: 2005/10/25 01:40 AM
me alegra saber que te gusto el articulo,
saludos
Por Anónimo - Fecha: 2006/01/08 11:43 PM
no esta mal eeee..
Por Anónimo - Fecha: 2006/03/24 06:48 PM
mm, podría funcionar con renglones??
Por Anónimo - Fecha: 2006/05/17 11:54 AM
Una consulta soy nuevo en lo que es desarrollo de aplicativos tanto en VB NET y ASP NET, este ejemplo funciona tambien para lo que es ASP NET, espero me puedas despejar esa duda y ante todo gracias.
Por royrojas - Fecha: 2006/06/28 10:50 PM
este articulo fue hecho solo para winforms, sorry.
Por Anónimo - Fecha: 2007/01/24 02:58 PM
amigo .. pero como puedo volverlo a mostrar... ???
Por Anónimo - Fecha: 2007/02/27 09:20 AM
Y como hago para un DataGridView es lo mismo?
Por Anónimo - Fecha: 2008/06/11 06:01 PM
como puedo manejar el espacio de las columanas de un datagrid pueden ayudarme porfavor
Por Anónimo - Fecha: 2012/01/28 11:09 AM
Graaacias exelente aporte
Por Anónimo - Fecha: 2012/07/18 09:03 PM
I actually magenad to sort this out, and this is how I did it for an un-bound datagridview in a win forms project VB2008Express. Private Sub DataGridView1_SortCompare(ByVal sender As Object, ByVal e As DataGridViewSortCompareEventArgs) Handles DataGridView1.SortCompare If e.Column.Index = 0 Then Dim DateValue1, DateValue2 As Date If Not Date.TryParse(e.CellValue1.ToString, DateValue1) Then Return If Not Date.TryParse(e.CellValue2.ToString, DateValue2) Then Return If DateValue1 = DateValue2 Then e.SortResult = 0 ElseIf DateValue2 DateValue1 Then e.SortResult = -1 Else e.SortResult = 1 End If End If e.Handled = True End SubI then call the routine from within one of my subs that loads data like so: sort routine before loading comboboxes Dim newcolumn As DataGridViewColumn = DataGridView1.Columns(0) Dim direction As ListSortDirection direction = ListSortDirection.Ascending DataGridView1.Sort(newcolumn, direction)I am posting it here in the hope that like me, if some-one needs it as desperately as I did, they can have access to it. Also, if this code is not as efficient as can be, I am hoping someone can refine it for our good use!thanks again for providing the forum and the spark!
Por Anónimo - Fecha: 2012/07/20 05:58 AM
aE7AGI , [url=http://hsvzjfefbcmc.com/]hsvzjfefbcmc[/url], [link=http://wrctkahzjbqa.com/]wrctkahzjbqa[/link], http://biwbpjiionvi.com/
Por Anónimo - Fecha: 2012/07/21 12:19 PM
wwZEqj , [url=http://vamlusbbpehv.com/]vamlusbbpehv[/url], [link=http://apbjyifwreio.com/]apbjyifwreio[/link], http://vqjovymjcczx.com/
Por Anónimo - Fecha: 2015/07/18 04:26 AM
I coulnd't beivlee it when I started creating a compact DB with VSS 2012 and I could arrange columns, script tables (much less the database), and so on. Toolbox to the rescue! Now I can do some basics. I am gratefule. It's like adding gears 2 and 3, plus reverse, to the go-kart. Thanks!
Por Anónimo - Fecha: 2015/07/21 01:28 PM
So happy to find this!No idea why the default stinteg is false, i suppose to keep computer-programmers in business (as its really difficult to figure this stuff out without shitloads of net access http://suirgbiugz.com [url=http://quyhrqi.com]quyhrqi[/url] [link=http://ewntgbw.com]ewntgbw[/link]
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
ricardo leppe t
pedrojavier
CALIN
willipinru
richard
ragomez
PER 238
MEX 236
CRI 188
COL 118
ESP 105
ARG 88