Foros del Web » Programación para mayores de 30 ;) » .NET »

Ayuda Ordenar un GridView

Estas en el tema de Ayuda Ordenar un GridView en el foro de .NET en Foros del Web. Saludos. Tengo problemas para ordenar un gridview al momento de hacer clic sobre el encabezado (la columna)... pues no he podido pasar la informacion del ...
  #1 (permalink)  
Antiguo 19/06/2008, 01:08
 
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 15 años, 10 meses
Puntos: 0
Ayuda Ordenar un GridView

Saludos.

Tengo problemas para ordenar un gridview al momento de hacer clic sobre el encabezado (la columna)... pues no he podido pasar la informacion del GridView a un tabla para poder ejecutar el evento sort ya que la lista es de collection.generic.list<Absentismo>

Si alguien podria orientarme.

Gracias
  #2 (permalink)  
Antiguo 02/07/2008, 06:28
 
Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 15 años, 10 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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:40.