Array
(
)

Questãoo de DataBinding de varias comboxes (windows Forms)

Stargazer
   - 27 mai 2008

Olá a todos!

Tenho vindo a experimentar umas questões ´estranhas´ com databings em
Windows Forms (VS 2008 framework 3.5).

Tenho um form, bastante simples, com 2 comboboxes e uma textbox.

No load do form, eu preencho as comboboxes com os meus dados, através
de dois BindingSources diferentes, um para cada combo. Ate aqui tudo bem.

Posteriormente adiciono um binding a ambas as combos para 2
propriedades do meu custom object (´ID1´ e ´ID2´), para quando carrego
o meu objecto os dados aparecerem logo. Isto é feito de cada vez que o
meu objecto é criado (por exemplo, no form load ou quando se carrega
no botao novo).

O meu problema é que quando selecciono um item na segunda combobox, o
que quer que tenha seleccionado na primeira deixa de estar
seleccionado. Fiz alguns testes e cheguei à conclus&ãoo que se não
adicionar os bindings ao meu objecto, este comportamento das combos
não acontece, o que me leva a desconfiar que o problema está aí.

O meu cenário é mais ou menos o seguinte:

No form load, cada uma das combos tem um novo ´BindingContext´:

#Código

Combo1.BindingContex = new BindingContext();
Combo2.BindingContex = new BindingContext();


Dois ´BindigSources´ sao prenchidos com os mesmos dados:

#Código
BindingSource1.DataSource = MyService.FetchData();
BindingSource2.DataSource = MyService.FetchData();

As combos são então preenchidas pelos dois ´BindingSources´:

#Código
Combo1.DisplayMember = "Description";
Combo1.ValueMember = "ID";
Combo1.DataSource = BindingSource1;

Combo2.DisplayMember = "Description";
Combo2.ValueMember = "ID";
Combo2.DataSource = BindingSource2;


Depois, crio um novo objecto e faço reset dos bindings ao meu objecto:

#Código
ObjObject myObject = new ObjObject();

Combo1.DataBindings.Clear();
Combo1.DataBindings.Add("SelectedValue", myObject, "ID1");

Combo2.DataBindings.Clear();
Combo2.DataBindings.Add("SelectedValue", myObject, "ID2");

TextBox1.DataBindings.Clear();
TextBox1.DataBindings.Add("Text", myObject, "TextField");


Estarei a fazer alguma coisa ´impossivel´ ou simplesmente alguma coisa
mal? Alguém pode dar aqui uma ajudinha?

Obrigado!!