2011-08-01 137 views
1

我創建了下面的類人模式:.NET的WinForms組合框的BindingSource和數據綁定問題

namespace DataBindingTest 
{ 
    public enum colorEnum 
    { 
     Red, 
     Green, 
     Yellow, 
     Blue, 
    } 

    class Person 
    { 
     private string _Name; 
     private int _Age; 
     private colorEnum _FavoriteColor; 
     private bool _HasAllergies; 

     public string Name 
     { 
      get { return _Name; } 
      set { _Name = value; } 
     } 

     public int Age 
     { 
      get { return _Age; } 
      set { _Age = value; } 
     } 

     public colorEnum FavoriteColor 
     { 
      get { return _FavoriteColor; } 
      set { _FavoriteColor = value; } 
     } 

     public bool HasAllergies 
     { 
      get { return _HasAllergies; } 
      set { _HasAllergies = value; } 
     } 

    } 
} 

在我的主要形式,我有一個將被綁定到Person對象的數組的組合框。當我從這個組合框中選擇一個人時,我想要顯示他們的年齡(在NumericUpDown控件中),他們是否有過敏(作爲複選框)和他們最喜歡的顏色(在DropDownStyle設置爲DropDownList的另一個組合框中)。要做到這一點,我有:

  1. 增加了組合框(comboBoxPeople),NumericUpDown控件,一個複選框和另一組合框(comboBoxFavoriteColor)到我的形式。
  2. 創建一個新的DataSource從上面
  3. 增加了一個BindingSource的宣佈我的Person類我的形式
  4. BindingSource的DataSource屬性設置爲在#2中定義的數據源。
  5. 將數據源的comboBoxPeople到BindingSource和將DisplayMember到BindingSource的
  6. Name屬性我已綁定BindingSource的時代屬性NumericUpDown控件和BindingSource的對CheckBox控件的HasAllergies財產
  7. 在我的構造函數中,我創建了3個Person對象的數組,定義的所有它們的屬性,然後BindingSource的DataSource屬性設置爲這個數組

到目前爲止,一切都按預期工作。現在我想在comboBoxFavoriteColor中顯示該人最喜歡的顏色(即BindingSource的FavoriteColor屬性)。我已經將DropDownStyle設置爲DropDownList,因爲FavoriteColor是一個枚舉。然而,我不清楚我應該如何綁定這個組合框,以便1)包含FavoriteColor枚舉值,並且2)當我從comboBoxPeople中選擇一個人時,將適當的顏色設置爲SelectedItem。任何人都可以給我一個這個想法嗎?非常感謝!

回答

2

你可以做湯姆建議,但至少有一種簡單的方法可以在不將Person.FavoriteColor更改爲字符串的情況下執行此操作。

添加屬性,以人稱爲FavoriteColorString

public class Person 
{ 
    [...] 
    public colorEnum FavoriteColor { get; set; } 
    public string FavoriteColorString 
    { 
     get { return FavoriteColor.ToString(); } 
     set { FavoriteColor = (colorEnum)Enum.Parse(typeof(colorEnum), value); } 
    } 
} 

重新編譯所以新的財產BindingSource的顯示出來。

現在將comboBoxFavoriteColor.SelectedItem綁定到FavoriteColorString

並在運行時,做湯姆說:

comboBoxFavoriteColor.DataSource = Enum.GetNames(typeof(colorEnum)); 

瞧!它現在應該按照你想要的方式工作。

當您保留設置對象時,只是不保留FavoriteColorString屬性。

+0

+1,今天學到了新東西 –

+0

這就是我想要的方式! :-)這是同一個週末的兩次,你給了我一個*完美*的解釋,我正在嘗試做的事情。我衷心感謝你! – user685869

+0

我的榮幸。謝謝你寫的問題! –

1

你需要做的東西沿着這些路線:

string[] colors = Enum.GetNames(typeof(colorEnum)); 
    this.comboBox1.DataSource = colors; 

..和使事情變得更容易,只是喜歡的顏色保存爲string型而不是colorEnum

+0

謝謝,即得到comboBoxFavoriteColor填充顏色枚舉的顏色。但是當我在comboBoxPeople中選擇一個人時,我仍然需要將所選顏色顯示在組合框中。我通過指定控件的Value屬性應綁定到bindingSource1 - Age來將Age映射到我的NumericUpDown控件。這似乎並不適用於顏色組合框,但。我可以選擇人1並將他們喜歡的顏色設置爲紅色。但是當我更改爲人2時,顏色組合框仍然設置爲紅色。我希望它更新以顯示該人的顏色。 – user685869

+0

它可以做到。我會發佈一個答案 - 很快再回來看看。 –