<< Click to Display Table of Contents >> GridView - ordenando sem datasource de base (modo 2) |
![]() ![]() ![]() |
Default.aspx
<asp:GridView ID="Grid" runat="server" Caption="Titulo" onsorting="Grid_Sorting" AllowSorting="true"></asp:GridView>
Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Data;
// classe básica usado para os testes
public class Cliente
{
public int Id { get; set; }
public string Nome { get; set; }
public decimal Salario { get; set; }
}
// esta classe apenas retorna uma lista de objetos Cliente
// que podem vir ordenados por nome ou id, asc ou desc
public static class Listagem
{
public static List<Cliente> GetClientes(bool SortNome, bool Ascend)
{
List<Cliente> lista = new List<Cliente>();
// aqui preenchemos com dados para dar volume para o testes
lista.Add(new Cliente() { Id = 1, Nome = "Angelina", Salario = (decimal)5000.00 });
lista.Add(new Cliente() { Id = 2, Nome = "Scarlet", Salario = (decimal)1000.2 });
lista.Add(new Cliente() { Id = 3, Nome = "Inara", Salario = (decimal)354.32 });
lista.Add(new Cliente() { Id = 4, Nome = "Zoe", Salario = (decimal)100.24 });
lista.Add(new Cliente() { Id = 5, Nome = "Keylee", Salario = (decimal)90.2 });
lista.Add(new Cliente() { Id = 6, Nome = "Lara", Salario = (decimal)3400.0 });
lista.Add(new Cliente() { Id = 7, Nome = "Ripley", Salario = (decimal)1200 });
lista.Add(new Cliente() { Id = 8, Nome = "Samus", Salario = (decimal)0.99 });
lista.Add(new Cliente() { Id = 9, Nome = "Peach", Salario = (decimal)102.22 });
lista.Add(new Cliente() { Id = 10, Nome = "Zelda", Salario = (decimal)11.11 });
lista.Add(new Cliente() { Id = 11, Nome = "Trinity", Salario = (decimal)12.2 });
lista.Add(new Cliente() { Id = 12, Nome = "Leia", Salario = (decimal)98.22 });
lista.Add(new Cliente() { Id = 13, Nome = "Lois", Salario = (decimal)3.78 });
lista.Add(new Cliente() { Id = 14, Nome = "Cloe", Salario = (decimal)14.45 });
lista.Add(new Cliente() { Id = 15, Nome = "Lana", Salario = (decimal)10.0 });
lista.Add(new Cliente() { Id = 16, Nome = "Sun", Salario = (decimal)180.8 });
lista.Add(new Cliente() { Id = 17, Nome = "Sardenta", Salario = (decimal)201.9 });
lista.Add(new Cliente() { Id = 18, Nome = "Loraine", Salario = (decimal)1200.8 });
lista.Add(new Cliente() { Id = 19, Nome = "Sarah Connor", Salario = (decimal)1100.77 });
// aqui foi meio gambiarra, só para demonstrar
if (SortNome)
{
// order por nome - usando delegates
if (Ascend)
lista.Sort(delegate(Cliente c1, Cliente c2)
{
return c1.Nome.CompareTo(c2.Nome);
}
);
// mesma coisa mas desc
else
lista.Sort(delegate(Cliente c1, Cliente c2)
{
return c2.Nome.CompareTo(c1.Nome);
}
);
}
else // ordenando por ID
{
if (Ascend)
lista.Sort(delegate(Cliente c1, Cliente c2)
{
return c1.Id.CompareTo(c2.Id);
}
);
else
lista.Sort(delegate(Cliente c1, Cliente c2)
{
return c2.Id.CompareTo(c1.Id);
}
);
}
return lista;
}
}
public partial class _Default : System.Web.UI.Page
{
// este método usa o ViewState para manter o DESC / ASC gravado
public SortDirection GridViewSortDirection
{
get
{
// Checks for the first time when the ViewState sort direction is null
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
// Changes the sort direction
else
{
if (((SortDirection)ViewState["sortDirection"]) == SortDirection.Ascending)
{
ViewState["sortDirection"] = SortDirection.Descending;
}
else
{
ViewState["sortDirection"] = SortDirection.Ascending;
}
}
return (SortDirection)ViewState["sortDirection"];
}
set
{
ViewState["sortDirection"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Grid.DataSource = Listagem.GetClientes(false, false);
Grid.DataBind();
}
}
protected void Grid_Sorting(object sender, GridViewSortEventArgs e)
{
Grid.DataSource = Listagem.GetClientes(e.SortExpression == "Nome", GridViewSortDirection == SortDirection.Ascending);
Grid.DataBind();
}
}