|    
			
				02/07/2008, 06:28
			
			
			  | 
  |   |  |  |  Fecha de Ingreso: junio-2008 
						Mensajes: 5
					 Antigüedad: 17 años, 4 meses Puntos: 0 |  | 
  |  Respuesta: Ayuda Ordenar un GridView  
  Ya di con la solucion. Tuve que crear una clase para pasar de Collection.Generic.List a una DataSet....
 Aqui va el Codigo:
 
 public class CommonWebControls
 {
 /// <summary>
 /// Convierte una coleccion de elementos dada en un objeto de negocio a un DataSet.
 /// Toma como entrada un objeto de negocio que contiene la colección de elementos que vamos a mostrar
 /// en un determinado control web y busca esa coleccón a la vez que crea las columnas, filas y finalmente
 /// la tabla que formarán parte del DataSet que devuelve.
 /// La finalidad de este procedimiento es que todos los controles web que tengan como entrada de datos su
 /// propiedad DataSource reciban un DataSet y no se tengan que preocupar por donde buscar la coleccion
 /// que deben mostrar en el control.
 /// </summary>
 /// <param name="obj">Objeto de negocio con la coleccion delementos a mostrar</param>
 /// <returns>DataSet con la coleccion</returns>
 public static DataSet ConvertToDataSet(object obj)
 {
 List<AbsentismoCurso> propertyList = null;
 ArrayList propertyList2 = null;
 DataSet ds = new DataSet();
 DataTable dt = new DataTable();
 object[,] values = null;
 int count = 0;
 
 IEnumerator en;
 int rowCount = 0;
 int propertyCount = 0;
 
 // lista de propiedades del objeto de negocio que queremos que formen parte del DataSet
 try
 {
 propertyList = (List<AbsentismoCurso>)obj;
 en = propertyList.GetEnumerator();
 }
 catch
 {
 propertyList2 = (ArrayList)obj;
 en = propertyList2.GetEnumerator();
 }
 
 Type tp;
 
 // La primera vez que recorremos las propiedades creamos las columnas de la tabla
 bool fillColumnsHeaders = true;
 while (en.MoveNext())
 {
 tp = en.Current.GetType();
 if (fillColumnsHeaders)
 {
 foreach (PropertyInfo pI in tp.GetProperties())
 {
 dt.Columns.Add(pI.Name);
 count++;
 }
 try
 {
 values = new object[((List<AbsentismoCurso>)obj).Count, count];
 }
 catch
 {
 try
 {
 values = new object[((ArrayList)obj).Count, count];
 }
 catch
 {
 return null;
 }
 }
 
 fillColumnsHeaders = false;
 }
 
 propertyCount = 0;
 // recogemos el valor de cada propiedad en un vector
 foreach (PropertyInfo pI in tp.GetProperties())
 {
 values[rowCount, propertyCount] = pI.GetValue(en.Current, null);
 propertyCount++;
 }
 rowCount++;
 }
 object[] objArray = new object[propertyCount];
 for (int i = 0; i < rowCount; i++)
 {
 for (int j = 0; j < propertyCount; j++)
 {
 objArray[j] = values[i, j];
 }
 dt.Rows.Add((object[])objArray);
 }
 ds.Tables.Add(dt);
 return ds;
 }
 
 }
 
 
 Luego en el ASPX:
 
 private string GridSampleSortDirection
 {
 get { return ViewState["SortDirection"] as string ?? "ASC"; }
 set { ViewState["SortDirection"] = value; }
 }
 
 private string GridSampleSortExpression
 {
 get { return ViewState["SortExpression"] as string ?? "Nombre"; }
 set { ViewState["SortExpression"] = value; }
 }
 
 private string getSortDirection()
 {
 switch (GridSampleSortDirection)
 {
 case "ASC":
 GridSampleSortDirection = "DESC";
 break;
 case "DESC":
 GridSampleSortDirection = "ASC";
 break;
 }
 return GridSampleSortDirection;
 }
 /// <summary>
 /// Funcion del GridView para ordenar la informacion segun el encabezado
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void grdAbsentismo_Sorting(object sender, GridViewSortEventArgs e)
 {
 List<AbsentismoCurso> listaObtenida = new List<AbsentismoCurso>();
 listaObtenida = controlador.ListaAbsentismoCurso;
 DataView s = new DataView(CommonWebControls.ConvertToDataSet(listaO  btenida).Tables[0]);
 
 GridSampleSortExpression = e.SortExpression;
 int pageIndex = grdAbsentismo.PageIndex;
 grdAbsentismo.DataSource = sortDataView(s, false);
 grdAbsentismo.DataBind();
 grdAbsentismo.PageIndex = pageIndex;
 }
 
 /// <summary>
 /// Funcion del GridView para pasar a la siguiente pagina
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void grdAbsentismo_PageIndexChanging(object sender, GridViewPageEventArgs e)
 {
 List<AbsentismoCurso> listaObtenida = new List<AbsentismoCurso>();
 listaObtenida = controlador.ListaAbsentismoCurso;
 DataView s = new DataView(CommonWebControls.ConvertToDataSet(listaO  btenida).Tables[0]);
 return s;
 
 int pageIndex = grdAbsentismo.PageIndex;
 grdAbsentismo.DataSource = sortDataView(s, true);
 grdAbsentismo.PageIndex = e.NewPageIndex;
 grdAbsentismo.DataBind();
 }
 
 /// <summary>
 /// Funcion para ordenar la lista
 /// </summary>
 /// <param name="dataView"></param>
 /// <param name="isPageIndexChanging"></param>
 /// <returns></returns>
 protected DataView sortDataView(DataView dataView, bool isPageIndexChanging)
 {
 if (isPageIndexChanging)
 {
 dataView.Sort = string.Format("{0} {1}", GridSampleSortExpression, GridSampleSortDirection);
 }
 else
 {
 dataView.Sort = string.Format("{0} {1}", GridSampleSortExpression, getSortDirection());
 }
 return dataView;
 }
 
 
 Espero que les sirva.
     |