Desenvolvimento - C#
Adicionado objetos a ComboBox
Veja nesse artigo um exemplo de como utilizar seus objetos como itens em uma ComboBox.
por Daniel Fonseca CastroA 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 :
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