Recortes de mi Webeo


Ordenando un DataGrid

Posted in Compact Framework por novaxo en 18 junio, 2007

Al grano:

Agregar los eventos MouseDown y MouseUp al DataGrid.

En el evento MouseDown agregar el siguiente codigo:

    private void dataGrid_MouseDown(object o, MouseEventArgs mea)
     {
     DataGrid.HitTestInfo hitTest;
    DataGrid dataGrid;
    // Use only left mouse button clicks.
     if (mea.Button == MouseButtons.Left)
     {
     // Set dataGrid equal to the object that called this event handler.
     dataGrid = (DataGrid)o;
    // Perform a hit test to determine where the mousedown event occured.
     hitTest = dataGrid.HitTest(mea.X, mea.Y);
    // If the mousedown event occured on a column header,
     // then perform the sorting operation.
    if (hitTest.Type == DataGrid.HitTestType.ColumnHeader)
     {
     // Reset mouse button state.
     buttonPress = true;
     }
     }
     }
  • En el evento MouseUp agregar el siguiente codigo:
public void dataGrid_MouseUp(object o, System.Windows.Forms.MouseEventArgs mea)
{

   DataGrid.HitTestInfo hitTest;
   DataTable dataTable;
   DataView dataView;
   string columnName;
   DataGrid dataGrid;
   // Use only left mouse button clicks.
   if (e.Button == MouseButtons.Left)
   {
   // Set dataGrid equal to the object that called this event handler.
   dataGrid = (DataGrid)sender;
   // Perform a hit test to determine where the mousedown event occured.
   hitTest = dataGrid.HitTest(e.X, e.Y);
   // If the MouseDown event occured on a column header,
   // then perform the sorting operation.
   if (hitTest.Type == DataGrid.HitTestType.ColumnHeader)
   {
      // Get the DataTable associated with this datagrid.
      dataTable = (DataTable)dataGrid.DataSource;
      // Get the DataView associated with the DataTable.
      dataView = dataTable.DefaultView;
      // Get the name of the column that was clicked.
      if(dataGrid.TableStyles.Count != 0) // Si hay un estilo
         columnName = dataGrid.TableStyles[0].GridColumnStyles[hitTest.Column].MappingName;
      else
         columnName = dataTable.Columns[hitTest.Column].ColumnName;
      // If the sort property of the DataView is already the current
      // column name, sort that column in descending order.
      // Otherwise, sort on the column name.
      if (dataView.Sort == columnName)
         dataView.Sort = columnName + " DESC";
      else
         dataView.Sort = columnName;
      }
   }
}

Consideraciones:

  • En el método MouseDown no esta declarado DataGrid dataGrid.
  • En el método MouseUp tener cuidado del DataSource que esten usando. En el ejemplo ponen al dataTable.DefaultView como DataSource, si usan otro DataView al final del método MouseUp poner: myDataGridTrack.DataSource = dataView;.
  • En ambos métodos el parámetro sender (object) en el ejemplo se llama o.
  • En ambos métodos el parámetro e (MouseEventArgs) en el ejemplo se llama mea.
  • Declarar en la clase el mienbro private bool buttonPress.

Fuente del recorte original Para ver este articulo recomiendo usar Internet Explorer Un requerimiento más en una aplicación es un buen motivo para navegar por la web y de paso aprender algo en el camino.

Fuente del recorte modificado para soportar TableStyles Una pequeña modificacion del codigo original para dar soporte a TableStyles, múy útil en Compact Framework.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: