Desenvolvimento - C#

Ordenando Listas com C# NET

Neste artigo vou explicar um pouco sobre lista(List) e vou mostrar um exemplo de como trabalhar com lista e como ordená-las de um jeito prático e fácil.

por Everton José Benedicto



Introdução

Neste artigo vou explicar um pouco sobre lista(List<T>) e vou mostrar um exemplo de como trabalhar com lista e como ordená-las de um jeito prático e fácil.

List<>

Representa uma lista de objetos fortemente tipados que podem ser acessados pelo índice. Fornece método de pesquisa, ordenar e manipular listas.

Uma lista pode conter elementos de qualquer tipo de dado bool, byte, char, decimal, double, float, int, long, object, sbyte, short, string, uint, ulong, ushort, classes e etc. Listas possuem um jeito fácil de você manipular os dados e deixam o seu código muito mais limpo e fácil de entender.

Cenário do Exemplo

Vamos criar em C# um aplicativo que crie uma lista popule está lista com dados e ordene-a de várias maneiras, segue abaixo a imagem de como ficará o aplicativo no final deste artigo:

Cenário do Exemplo

Criando o projeto

Crie um projeto do tipo Windows Forms Application com o nome ListOrder e salve-o onde preferir em seu computador.

Configurando o Form

No Form1 altere as seguintes propriedades:

- MaximizeBox = false;

- MinimizeBox = false;

- Size = 485;485;

- StartPosition = CenterScreen;

- Text = Order List<Cliente>;

- Name = FormOrder;

Desenvolvendo o Layout da tela

Olhe na imagem no título Cenário de exemplo e coloque os componentes como estão posicionados na imagem, segue abaixo os componentes e suas configurações nas propriedades:

GroupBox

- Name = gbOrdenacao;

- Location = 12; 12;

- Size = 321; 100;

- Text = Ordenar Por:

RadionButton

- Name = rbCodigo

- AutoSize = true

- Checked = true

- Location = 7; 20

- Size = 58; 17

- TabStop = True

- Text = Código

- Evento - CheckedChanged = rbCodigo_CheckedChanged

RadionButton

- Name = rbNome

- AutoSize = true

- Location = 7; 43

- Size = 53; 17

- Text = Nome

- Evento - CheckedChanged = rbNome _CheckedChanged

RadionButton

- Name = rbDataNascimento

- AutoSize = true

- Location = 7; 66

- Size = 107; 17

- Text = Data Nascimento

- Evento - CheckedChanged = rbDataNascimento _CheckedChanged

RadionButton

- Name = rbSexo

- AutoSize = true

- Location = 168; 20

- Size = 49; 17

- Text = Sexo

- Event - CheckedChanged = rbSexo _CheckedChanged

RadionButton

- Name = rbSexoDataNascimento

- AutoSize = true

- Location = 168; 43

- Size = 143; 17

- Text = Sexo e Data Nascimento

- Event - CheckedChanged = rbSexoDataNascimento

- _CheckedChanged

Button

- Name = btnCarregar

- Location = 344; 49

- Size = 75; 23

- Text = Carregar

- Event - Click = btnCarregar_Click

GroupBox

- Name = gbGrid

- Locatoin = 12; 118

- Size = 450; 33

- Text = Dados

DataGridView

- Name = dgvDados

- AllowUserToAddRows = false

- AllowUserToDeleteRows = false

- Dock = Fill

- Location = 3; 16

- ReadOnly = true

- Size = 444; 313

Listagem 1: Codificando (Métodos)

#region [Métodos Privados]
        private void CarregarGrid()
        {
            List<Cliente> clientes = new List<Cliente>();
            Random rnd = new Random();

            for (int i = 0; i < 10; i++)
            {
                Cliente cliente = new Cliente();

                cliente.Codigo = i + 1; //Código do cliente.
                cliente.Nome = "Cliente " + rnd.Next(1, 100).ToString(); //Nome do cliente.
cliente.DataNascimento = DateTime.Today.AddYears(-25).AddDays(rnd.Next(1, 100)); //Data de Nascimento do cliente.
                cliente.Sexo = (rnd.Next(1, 100) % 2) == 0 ? 'M' : 'F';

                clientes.Add(cliente);
            }

            this.dgvDados.DataSource = clientes;
            this.rbCodigo.Checked = true;
        }

        private void OrderCodigo()
        {
            List<Cliente> clientes = this.dgvDados.DataSource as List<Cliente>;

            clientes = clientes.OrderBy(c => c.Codigo).ToList();

            this.dgvDados.DataSource = clientes;
        }

        private void OrderNome()
        {
            List<Cliente> clientes = this.dgvDados.DataSource as List<Cliente>;

clientes = clientes.OrderBy(c => Int32.Parse(c.Nome.Trim().Substring(c.Nome.Trim().IndexOf(" ")))).ToList();

            this.dgvDados.DataSource = clientes;
        }

        private void OrderDataNascimento()
        {
            List<Cliente> clientes = this.dgvDados.DataSource as List<Cliente>;

            clientes = clientes.OrderBy(c => c.DataNascimento).ToList();

            this.dgvDados.DataSource = clientes;
        }

        private void OrderDataNascimentoSexo()
        {
            List<Cliente> clientes = this.dgvDados.DataSource as List<Cliente>;

clientes = clientes.OrderBy(c => c.Sexo).ThenBy(c => c.DataNascimento).ToList();

            this.dgvDados.DataSource = clientes;
        }

        private void OrderSexo()
        {
            List<Cliente> clientes = this.dgvDados.DataSource as List<Cliente>;

            clientes = clientes.OrderBy(c => c.Sexo).ToList();

            this.dgvDados.DataSource = clientes;
        }

        private void OrdenarGrid()
        {
            if (this.rbCodigo.Checked)
            {
                this.OrderCodigo();
            }

            if (this.rbNome.Checked)
            {
                this.OrderNome();
            }

            if (this.rbDataNascimento.Checked)
            {
                this.OrderDataNascimento();
            }

            if (this.rbSexoDataNascimento.Checked)
            {
                this.OrderDataNascimentoSexo();
            }

            if (this.rbSexo.Checked)
            {
                this.OrderSexo();
            }
        }
        #endregion

Listagem 2 :Codificando (Construtor)

#region [Construtor]
        public FormOrder()
        {
            InitializeComponent();
            this.CarregarGrid();
        }
        #endregion

Listagem 3: Codificando (Events)

  #region [Eventos]
        private void rbCodigo_CheckedChanged(object sender, EventArgs e)
        {
            this.OrdenarGrid();
        }

        private void rbNome_CheckedChanged(object sender, EventArgs e)
        {
            this.OrdenarGrid();
        }



        private void rbDataNascimento_CheckedChanged(object sender, EventArgs e)
        {
            this.OrdenarGrid();
        }

        private void rbSexoDataNascimento_CheckedChanged(object sender, EventArgs e)
        {
            this.OrdenarGrid();
        }

        private void btnCarregar_Click(object sender, EventArgs e)
        {
            this.CarregarGrid();
        }

        private void rbSexo_CheckedChanged(object sender, EventArgs e)
        {
            this.OrdenarGrid();
        }
        #endregion

Conclusão

Neste exemplo você irá perceber que cada vez que você alterar a alteração a aplicação fará uma ordenação na lista e a colocará no DataSource do grid. Com isso percebemos que listas são muito mais práticas e melhores de se trabalhar.

Everton José Benedicto

Everton José Benedicto - Experiência de 3 anos com SQL Server 2000 e 2005, FastReport, Reporting Services e C#.