Ocultando columnas duplicadas en un Web dataGrid

Fecha: 25/Oct/2004 (20/Oct/2004)
Autor: Miguel Muñoz Serafín

 


Resumen

Este artículo proporciona un ejemplo de como evitar que en un Web Datagrid aparezcan registros con columnas repetidas.

 

Descripción

Algunas ocasiones necesitamos mostrar información en un Web Datagrid donde el valor de una columna se repite para un grupo consecutivo de registros. En estos casos deseamos que la columna que se duplica solo aparezca al inicio del grupo de registros.

El siguiente ejemplo muestra un Datagrid con 2 columnas: CategoryName y ProductName tomadas de las tablas Categories y Products de la base de datos Northwind. Se muestra cada categoría de producto y los productos correspondientes sin duplicar para cada registro el nombre de la categoría.

Para probar este ejemplo debemos crear una aplicación web y copiar las siguientes líneas en la ventana de código de la página aspx. Podemos de igual forma utilizar un System.Web.UI.WebControls.Repeater en lugar de un datagrid para darle un mejor formato a la información.

El código esta realizado utilizando Visual C#.  

 

   //Esta variable almacena el nombre de la categoria actual
   private string CurrentCategoryName = "";
 

   private void Page_Load(object sender, System.EventArgs e)

   {

    if (!Page.IsPostBack) //Obtener los datos para el grid

    {

      //Definir la conexión

      System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection();

      cn.ConnectionString = "data source=(local);integrated security=true;initial catalog=northwind";

      //Configurar el data adapter

      string strSQL = "Select CategoryName, ProductName from Categories, Products where Categories.Categoryid = Products.CategoryID";

      System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(strSQL, cn);

      //Llenar el Dataset

      System.Data.DataSet ds = new DataSet();

      da.Fill(ds, "ProductosPorCategoria");

      //Configurar el DatGrid

      DataGrid dg = new DataGrid();

      Page.Controls.Add(dg);

      //Establecer el evento ItemDataBound que evitara que los datos se vean duplicados

      dg.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid_ItemDataBound);

        //Ligar el datagrid con la fuente de datos

      dg.DataSource = ds;

      dg.DataMember = "ProductosPorCategoria";

      dg.DataBind();

    }

   }

   //Este evento evita que la columna CategoryName se vea duplicada.

   private void DataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

   {

    if (CurrentCategoryName != e.Item.Cells[0].Text) //Nueva categoria?

    {

      CurrentCategoryName = e.Item.Cells[0].Text; //Actualizar nueva categoria

    }

    else

    {

      e.Item.Cells[0].Text = "";  //Eliminar el texto que muestra la categoría

    }

   }

 


ir al índice