0

WinForm に通常の ComboBox があります。都市を入力し、そのデータバインディングをビジネス オブジェクト CityID に設定したいと考えています。オブジェクトは Office {ID, Name, CityID} です。そのようなアイテムを入力します

public void LoadCityCombo(List<City> list)
{
    CityComboBox.DisplayMember = "Name";
    CityComboBox.ValueMember = "ID";
    CityComboBox.DataSource = list;
}       

オブジェクトをロードするより

public void LoadOffice(Office office)
{
    NameTextBox.DataBindings.Add("Text", office, "Name");
    AddressTextBox.DataBindings.Add("Text", office, "Address");
    Binding b = new Binding("SelectedValue", office, "CityID");
    CityComboBox.DataBindings.Add(b);
}  

フォームを開くと適切な都市が選択されますが、コンボから別の都市を選択して他のコントロールに移動すると (コンボ フォーカスが緩む)、古い選択都市がコンボに返されます。

私は何を台無しにしていますか?

4

1 に答える 1

0

問題はこの行にありました:

Binding b = new Binding("SelectedValue", office, "CityID");
CityComboBox.DataBindings.Add(b);

修正は

Binding b = new Binding("SelectedValue", office, "CityID", true);
CityComboBox.DataBindings.Add(b);

また

Binding b = new Binding("SelectedValue", office, "CityID");
b.FormatingEnabled = true;
CityComboBox.DataBindings.Add(b);

ローカリゼーションが原因かどうかはわかりませんが、別のコンピューターでは、このプロパティを設定しなくてもバインドが機能しました。奇妙なことに、このプロパティを設定しないと、バインディング エラーがあるかどうかを確認できる BindingCompleted イベントが発生しません。

于 2012-10-30T09:20:23.010 に答える