lunes, 7 de febrero de 2011

DataGridView ordenar con listas genéricas (DataGridView sorting with Generic List)

Recientemente cambiamos con un amigo los Obsoletos Data Set por listas genéricas y el se dio cuenta que cuando se le asigna el Data Source al Grid llena la información pero no permite ordenar.

Para lograr este objetivo llegamos a una solución un poco rustica pero funcional.

Capturamos el evento: dataGridView1_ColumnHeaderMouseClick
Este Evento es el que se dispara cuando realizamos una solicitud de ordenación.


Private  SortOrder Orden = SortOrder.None;
Private void  dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
   if(e.Button == MouseButtons.Left)
   {
    DataGridViewColumn newColumn = dataGridView1.Columns[e.ColumnIndex];
    if(dataGridView1.SortOrder == SortOrder.None)

     {
       if(newColumn.Name == "Edad")
       {
         if(Orden == SortOrder.Descending)
         {
           dataGridView1.DataSource = students.OrderBy(p => p.Edad).ToList();
           Orden = SortOrder.Ascending;
         }
         else
         {
           dataGridView1.DataSource = students.OrderBy(p => p.Edad).Reverse().ToList();
           Orden = SortOrder.Descending;
         }
       }
       if(newColumn.Name == "Nombre")
       {
         if(Orden == SortOrder.Descending)
         {
           dataGridView1.DataSource = students.OrderBy(p => p.Nombre).ToList();
           Orden = SortOrder.Ascending;
         }
         else
         {
           dataGridView1.DataSource = students.OrderBy(p => p.Nombre).Reverse().ToList();
           Orden = SortOrder.Descending;
         }
       }
       if(newColumn.Name == "Sexo")
       {
         if(Orden == SortOrder.Descending)
         {
           dataGridView1.DataSource = students.OrderBy(p => p.Sexo).ToList();
           Orden = SortOrder.Ascending;
         }
         else
         {
           dataGridView1.DataSource = students.OrderBy(p => p.Sexo).Reverse().ToList();
           Orden = SortOrder.Descending;
          }
        }
      }
   }
 }

No hay comentarios.: