t

Comentários recentes

Adicionado objetos a ComboBox

Postado por Daniel Fonseca Castro - Friday, July 04, 2008 5:37 PM

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 .

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 :

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; }

    ///  
    /// Sobrescrever método ToString e retorno o valor que será exibido na combos 
    ///  
    ///  
    public override string ToString()
    {
        return String.Format("Companhia : {0} - Contato : {0}", this.CompanyName, this.ContactName);
    }
} 
Public Class ExemploObjeto

    Private _customerID As String
    Private _companyName As String
    Private _contactName As String
    Private _contactTitle As String
    Private _address As String
    Public Property CustomerID() As String
        Get
            Return _customerID
        End Get
        Set(ByVal value As String)
            _customerID = value
        End Set
    End Property
    Public Property CompanyName() As String
        Get
            Return _companyName
        End Get
        Set(ByVal value As String)
            _companyName = value
        End Set
    End Property
    Public Property ContactName() As String
        Get
            Return _contactName
        End Get
        Set(ByVal value As String)
            _contactName = value
        End Set
    End Property
    Public Property ContactTitle() As String
        Get
            Return _contactTitle
        End Get
        Set(ByVal value As String)
            _contactTitle = value
        End Set
    End Property
    Public Property Address() As String
        Get
            Return _address
        End Get
        Set(ByVal value As String)
            _address = value
        End Set
    End Property
    Public Overrides Function ToString() As String
        Return String.Format("Companhia : {0} - Contato : {0}", Me.CompanyName, Me.ContactName)
    End Function
End Class

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

private void PreencheComboBox()
{
    ExemploObjeto exemploObjeto = null;
    try
    {
        using (SqlConnection connection = new SqlConnection(Settings.Default.NorthwindConnectionString))
        {
            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);
    }
}
Private Sub PreencheComboBox()
    Dim objExemploObjeto As ExemploObjeto = Nothing
    Try
        Using connection As New SqlConnection(Settings.Default.NorthwindConnectionString)
            Using command As New SqlCommand()
                command.CommandText = "SELECT CustomerID,CompanyName,ContactName ,ContactTitle ,Address FROM Customers"
                command.Connection = connection
                connection.Open()

                Using reader As SqlDataReader = command.ExecuteReader()
                    'Preenche ComboBox
                    While (reader.Read())
                        'Cria Objeto que será Source para Combo
                        objExemploObjeto = New ExemploObjeto()
                        objExemploObjeto.CustomerID = reader.GetString(reader.GetOrdinal("CustomerID"))
                        objExemploObjeto.CompanyName = reader.GetString(reader.GetOrdinal("CompanyName"))
                        objExemploObjeto.ContactName = reader.GetString(reader.GetOrdinal("ContactName"))
                        objExemploObjeto.ContactTitle = reader.GetString(reader.GetOrdinal("ContactTitle"))
                        objExemploObjeto.Address = reader.GetString(reader.GetOrdinal("Address"))

                        'Adiciona objeto a Combo
                        comboBoxCustomers.Items.Add(objExemploObjeto)
                    End While
                End Using
            End Using
        End Using
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

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;
}
 
Private Sub comboBoxCustomers_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles comboBoxCustomers.SelectedIndexChanged
    'Carrega objeto selecionado
    Dim objExemploObjeto As ExemploObjeto = comboBoxCustomers.SelectedItem

    'Mostra os valores das propriedades do item selecionado
    textBoxId.Text = objExemploObjeto.CustomerID
    textBoxCompanhia.Text = objExemploObjeto.CompanyName
    textBoxContato.Text = objExemploObjeto.ContactName
    textBoxCargoContato.Text = objExemploObjeto.ContactTitle
    textBoxEndereco.Text = objExemploObjeto.Address
End Sub

Conclusão

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

Código Fonte

Daniel Fonseca Castro

Currently rated 4.0 by 3 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Categories: Windows Form

Related posts

  • AIRTON BARROS
    AIRTON BARROS
    28 Oct 2008 12:06 PM
    Ok, Daniel muito bom o artigo. Me ajudou bastante.
  • Salete
    Salete
    29 Oct 2008 11:48 AM
    Muito bom esse código! Me ajudou bastante. Obrigada
  • Junior
    Junior
    30 Oct 2008 1:04 AM
    kra.. muito bom msm.. isso que tava precisando

    []'s
  • Thiago
    Thiago
    02 Dec 2008 5:45 PM
    gostei muito desse codigo mas uma dica porque vc naum simplifica ele ????
    tipo asssim:
    nomedacomoboBox.Items.Add("nomedesejado");
    naum é que vc ta fazendo lá ????
    desculpe se tiver errado

    grato


    Thiago
  • Flávio Meira
    Flávio Meira
    03 Aug 2009 5:50 PM
    Este tutorial me ajudou muito. Obrigado e parabéns.

Add comment


 

  Country flag