How to put a value that is saved in the database in a combobox?

2

I'm using C # Windows Forms with .NET 3.5.

Insert all states of the federation within the property items of my combobox . When I seek a record saved my BD, the combobox assumes the value.

For example, when I look for a record that contains "AC" in the database table, the combobox does not assume the value, it goes blank.

The code:

Conta conta = new Conta();
conta = controle.Ler(id);            

cboEstado.SelectedItem = conta.estado;            
    
asked by anonymous 31.01.2014 / 12:43

3 answers

1

It's got to be simpler. Based on your Example:

Conta conta = new Conta();
conta = controle.Ler(id); 
cboEstado.DataSource = conta;
cboEstado.ValueMember = "ID ou IDENTIFICADOR UNICO DO REGISTRO";
cboEstado.DisplayMember = "SIGLA (acho que deve ser estado o nome da sua coluna)";
cboEstado.SelectedItem = conta.estado;
cboEstado.Refresh();
    
31.01.2014 / 14:10
4

You need to assign the DataSource in your Combobox , the "States" class has the "Id" and "

public class Estados
{
    public int Id { get; set; }
    public string Sigla { get; set; }

    public Estados(int id, string sigla)
    {
        this.Id = id;
        this.Sigla = sigla;
    }
}

In Form Load, we call:

private void Form1_Load(object sender, EventArgs e)
{
    List<Estados> estados = new List<Estados>(); /* Criei uma lista do tipo Estados */
    estados.Add(new Estados(1, "SP")); /*  Carregando minha lista com dados */
    estados.Add(new Estados(2, "RJ"));
    estados.Add(new Estados(3, "BA"));


    comboBox1.DataSource = estados; /* Atribuo o DataSource a minha lista */
    comboBox1.ValueMember = "Id"; /* O valor do combox eu pego do "Id" da minha classe Estados */
    comboBox1.DisplayMember = "Sigla"; /* O valor que o usuário irá ver no Combox */

    comboBox1.SelectedValue = 2 /* Selecionei o registro 2 que é igual a "RJ" */
}
    
31.01.2014 / 13:36
2

Next, if you load in the list of Items , objects of type A, you can only use in the SelectedItem property objects that compare with this type.

The following example does not work because of this:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    class MyClass
    {
        private string p;
        public MyClass(string p) { this.p = p; }
        public override string ToString() { return this.p; }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.comboBox1.Items.AddRange(new[]
            {
                new MyClass("RJ"),
                new MyClass("MG"),
                new MyClass("SP"),
            });

        this.comboBox1.SelectedItem = "SP"; // tipo string não se compara com tipo MyClass
    }
}

On the other hand, if I insert strings in the list of items, yes, I can use the SelectedItem property with a string, since two strings compare themselves:

        this.comboBox1.Items.AddRange(new[]
            {
                "RJ",
                "MG",
                "SP",
            });

        this.comboBox1.SelectedItem = "SP";
    
31.01.2014 / 13:37