GridView - ordenando sem datasource de base (modo 2)

<< Click to Display Table of Contents >>

Navigation:  ASP.NET > ASP Controls > GridView >

GridView - ordenando sem datasource de base (modo 2)

Previous pageReturn to chapter overviewNext page

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();

   }

}