Una de las preguntas más comunes en el uso del GridView es como automatizar el proceso de paginación y ordenación de los elementos de un GridView.
Lo primero que haremos sea poner a "true" las propiedades AllowPaging y AllowSorting. Tras esto tendremos que manejar los eventos Sorting y PageIndexChanging.
El código es el siguiente y no es muy complejo
protected void Page_Load(object sender, EventArgs e)
{
// Dummy load
DataTable table = new DataTable();
table.Columns.Add("Id");
table.Columns.Add("Code");
table.Rows.Add(new string[] { "1", "Codigo1" });
table.Rows.Add(new string[] { "2", "Codigo2" });
GridView1.DataSource = table;
GridView1.DataBind();
}
public string SortExpression
{
get { return (ViewState["SortExpression"] == null ? string.Empty : ViewState["SortExpression"].ToString()); }
set { ViewState["SortExpression"] = value; }
}
public string SortDirection
{
get { return (ViewState["SortDirection"] == null ? string.Empty : ViewState["SortDirection"].ToString()); }
set { ViewState["SortDirection"] = value; }
}
private string GetSortDirection(string sortExpression)
{
if (SortExpression == sortExpression)
{
if (SortDirection == "ASC")
SortDirection = "DESC";
else if (SortDirection == "DESC")
SortDirection = "ASC";
return SortDirection;
}
else
{
SortExpression = sortExpression;
SortDirection = "ASC";
return SortDirection;
}
}
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = GridView1.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
dataView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
GridView1.DataSource = dataView;
GridView1.DataBind();
}
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataBind();
}
Con muy poco esfuerzo tenemos un GridView que permite la paginación y la ordenación. Hay que tener en cuenta que este ejemplo se está recargando el GridView con "TODOS" los elementos (se hace en el Page_Load, con un DataTable). Para hacerlo bien, habría que traerse únicamente los elemenos que se van a mostrar, en base al número de página que se está mostrando y al número de elementos de cada página.