Desenvolvimento - C#

Adicionado objetos a ComboBox

Veja nesse artigo um exemplo de como utilizar seus objetos como itens em uma ComboBox.

por Daniel Fonseca Castro



A ComboBox é uns dos componentes mais utilizando no nosso dia a dia seja em uma aplicação Windows Form ou Web Form(DropDownList) , participando dos fóruns da MSDN percebi que muitas threads são criadas com perguntas de como concatenar duas colunas e mostrar ,como descobrir qual registro foi selecionado e fazer uma busca no banco de dados etc...

Muitas dessas dúvidas podem ser resolvidas utilizando uma pratica simples , consiste em criar um objeto e usar esse objeto com item da ComboBox , fazendo isso você ganha em flexibilidade e pode fazer validações ,concatenações,operações ,pode guarda N dados , enfim  você tem o controle total do que será exibido e guardado na sua ComboBox utilizando essa prática .

Criando o seu objeto com as propriedades e ações necessárias para atender a sua necessidade, você também ganha desempenho trabalhando desconectado do banco de dados e sem a necessidade de criar DataSet.

O ponto chave dessa prática e sobrescrever o método ToString do objeto esse método e chamado na hora em que o a propriedade Text da ComboBox for preenchida como o método ToString retorna uma string qualquer valor que você retorna será exibido na ComboBox , assim você pode concatenar N valores e fazer verificações para decidir o que mostrar .

Exemplo

 Recursos utilizados

· Visual Studio 2008 Express Edition

· Microsoft SQL Server 2005 Express Edition

· Banco de dados de exemplo Northwind

Primeiro passo : Criar um formulário como base na imagem abaixo :

Imagem1.png

Imagem 1


Segundo passo : Criar o objeto que será utilizando como item para o preenchimento da ComboBox.

public class ExemploObjeto

{

    public string CustomerID { get; set; }

    public string CompanyName { get; set; }

    public string ContactName { get; set; }

    public string ContactTitle { get; set; }

    public string Address { get; set; }

    /// <summary>

    /// Sobrescrever método ToString e retorno o valor que será exibido na combos

    /// </summary>

    /// <returns></returns>

    public override string ToString()

    {

        return String.Format("Companhia : {0} - Contato : {0}", this.CompanyName, this.ContactName);

    }

}

Terceiro passo : Preenche a ComboBox com o objeto criado no segundo passo.

private void PreencheComboBox()

{

    ExemploObjeto exemploObjeto = null;

    try

    {

        using (SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"))

        {

            using (SqlCommand command = new SqlCommand())

            {

                command.CommandText = "SELECT CustomerID,CompanyName,ContactName ,ContactTitle ,Address FROM Customers";

                command.Connection = connection;

                connection.Open();

                using (SqlDataReader reader = command.ExecuteReader())

                {

                    //Preenche ComboBox

                    while (reader.Read())

                    {

                        //Cria Objeto que será Source para Combo

                        exemploObjeto = new ExemploObjeto();

                        exemploObjeto.CustomerID = reader.GetString(reader.GetOrdinal("CustomerID"));

                        exemploObjeto.CompanyName = reader.GetString(reader.GetOrdinal("CompanyName"));

                        exemploObjeto.ContactName = reader.GetString(reader.GetOrdinal("ContactName"));

                        exemploObjeto.ContactTitle = reader.GetString(reader.GetOrdinal("ContactTitle"));

                        exemploObjeto.Address = reader.GetString(reader.GetOrdinal("Address"));

                        //Adiciona objeto a Combo

                        comboBoxCustomers.Items.Add(exemploObjeto);

                    }

                }

            }

        }

    }

    catch (Exception ex)

    {

        MessageBox.Show(ex.Message);

    }

}

Quarto passo : Recuperar o item adicionado, existe varias maneiras de fazer isso,  mais na minha opinião a melhor forma de se fazer isso é no evento SelectedIndexChanged utilizar a propriedade SelectedItem que retorna o objeto selecionado.

private void comboBoxCustomers_SelectedIndexChanged(object sender, EventArgs e)

{

    //Carrega objeto selecionado

    ExemploObjeto exemploObjeto = (ExemploObjeto)comboBoxCustomers.SelectedItem;

    //Mostra os valores das propriedades do item selecionado

    textBoxId.Text = exemploObjeto.CustomerID;

    textBoxCompanhia.Text = exemploObjeto.CompanyName;

    textBoxContato.Text = exemploObjeto.ContactName;

    textBoxCargoContato.Text = exemploObjeto.ContactTitle;

    textBoxEndereco.Text = exemploObjeto.Address;

}

Conclusão

Esse é um exemplo do que pode ser feito com a utilização dessa pratica , dessa forma você ganha muita flexibilidade e pode melhorar a performance dos seus  aplicativos trabalhando de forma desconectada do banco .

Daniel Fonseca Castro

Daniel Fonseca Castro

Daniel Fonseca Castro - Trabalha com desenvolvimento desde 2003, experiência em desenvolvimento de softwares para equipamentos móveis, web e desktop, atualmente trabalha como desenvolvedor na UNIP em São Paulo.
Blog do autor:
www.danielfonsecacastro.com.br