Cómo ocultar una columna en un DataGrid de Windows Forms

Resumen

En este artículo paso a paso se describe cómo ocultar una columna mediante programación en un formulario Windows Forms DataGrid mediante la manipulación de las propiedades del objeto DataGrid .

Requisitos

La lista siguiente describe el hardware recomendado, software, infraestructura de red y los service packs que necesita:
  • Microsoft Visual Studio .net instalado en un equipo que ejecuta un sistema operativo de Microsoft Windows compatible.
  • Una instancia disponible de Microsoft SQL Server o una base de datos de Microsoft Access disponible para realizar pruebas.
En este artículo se supone que está familiarizado con los temas siguientes:
  • Aplicaciones de formularios Windows Forms de Visual Basic .NET
  • Codificación de ADO.NET y enlace de datos

Descripción técnica

Las columnas individuales de una tabla mostrada no se exponen directamente como propiedades del objeto DataGrid . Para manipular las columnas individualmente, debe utilizar la clase DataGridTableStyle , que es un miembro del objeto DataGrid .

En este ejemplo, el procedimiento de evento Load recupera todas las columnas de la tabla productos . Sin embargo, el código en el procedimiento de evento Load oculta la columna QuantityPerUnit de la cuadrícula. La columna está oculto sólo en la cuadrícula y se mantiene como parte del conjunto de datos.

Ejemplo

  1. Abra Visual Studio. NET.
  2. Cree un nuevo proyecto de aplicación Windows en Visual Basic .NET. Se agregará Form1 al proyecto de forma predeterminada.
  3. Agregue un control DataGrid a Form1.
  4. Agregue la siguiente línea de código en la sección de declaraciones generales de Form1:
    Imports System.Data.SqlClient
  5. Pegue el código siguiente en el procedimiento de evento Load de Form1.

    Nota: asegúrese de modificar la cadena de conexión para la instancia de SQL Server.
    Dim cn As New SqlConnection("Data Source=MyServer;User Id=MyUser;Password=MyPassword;Initial Catalog=Northwind")cn.Open()
    Dim da As New SqlDataAdapter("SELECT * FROM Products", cn)
    Dim ds As New DataSet()
    da.FillSchema(ds, SchemaType.Source, "Products")
    da.Fill(ds, "Products")
    DataGrid1.SetDataBinding(ds, "Products")
    ' Code to hide column.
    Dim ts As New DataGridTableStyle()
    ts.MappingName = "Products"
    DataGrid1.TableStyles.Add(ts)
    DataGrid1.SetDataBinding(ds, "Products")
    DataGrid1.TableStyles("Products").GridColumnStyles.Remove(DataGrid1.TableStyles("Products").GridColumnStyles("QuantityPerUnit"))

  6. Ejecute el proyecto. Tenga en cuenta que la columna QuantityPerUnit no aparece en el control DataGrid en tiempo de ejecución aunque la instrucción SELECT incluye todas las columnas de la tabla.
Nota: como alternativa, puede utilizar la propiedad ColumnMapping de la colección Columns de la DataTable. Cuando se establece esta propiedad en oculto, la columna no se muestra. El código para pegar en el evento Load del formulario a utilizar esta técnica es similar a la siguiente:
Dim cn As New SqlConnection("Data Source=MyServer;User Id=MyUser;Password=MyPassword;Initial Catalog=Northwind")cn.Open()
Dim da As New SqlDataAdapter("Select * From Products", cn)
Dim ds As New DataSet()
da.FillSchema(ds, SchemaType.Source, "Products")
da.Fill(ds, "Products")
' Next line hides column.
ds.Tables("Products").Columns("QuantityPerUnit").ColumnMapping = MappingType.Hidden
DataGrid1.SetDataBinding(ds, "Products")

Dificultades

  • Si desea alternar entre ocultar una columna y mostrar una columna en tiempo de diseño, sólo necesitará agregar DataGridTableStyle una vez.
  • Para mostrar la columna, establezca la propiedad Width de GridColumnsStyles en un valor distinto de cero; Por ejemplo:
    DataGrid1.TableStyles("Products").GridColumnStyles("QuantityPerUnit").Width = 75

REFERENCIAS

Si la cuadrícula se enlaza en tiempo de diseño, puede utilizar el generador de la hoja de propiedades para ocultar o mostrar columnas. Este método se describe más detalladamente en la documentación de Visual Studio .NET está disponible en el siguiente sitio Web de MSDN:Puede encontrar documentación adicional acerca de las clases DataGrid en los siguientes sitios Web de MSDN:
Propiedades

Id. de artículo: 317951 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios