2011-08-01 3 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オブジェクトの配列にバインドされるコンボボックスを持っています。このコンボボックスから人を選択すると、アレルギー(チェックボックス)と好きな色(DropDownStyleがDropDownListに設定されている別のコンボボックス内)のいずれであるかをNumericUpDownコントロールで表示したいと考えています。これを実現するために、私がしている:

  1. は私のフォームにコンボボックス(comboBoxPeople)、NumericUpDownコントロール、チェックボックスと別のコンボボックス(comboBoxFavoriteColor)を追加しました。
  2. 上で宣言した私のPersonクラスから新しいデータソースを作成し
  3. は#2で定義されたデータソースへのBindingSourceのDataSourceプロパティを設定し、私のフォームにのBindingSourceを追加しました。私は、チェックボックスコントロール
  4. にNumericUpDownコントロールへのBindingSourceのAgeプロパティとのBindingSourceのHasAllergiesプロパティをバインドしているのBindingSource
  5. のNameプロパティにのBindingSourceとDisplayMemberにcomboBoxPeopleのDataSourceを設定し
  6. 私のコンストラクタで、私は、3つのオブジェクトの配列を作成し、そのプロパティのすべてを定義した後、これまでのところ、この配列

へのBindingSourceのDataSourceプロパティを設定している、すべてが期待どおりに動作しています。今度は、その人の好きな色(BindingSourceのFavoriteColorプロパティ)をcomboBoxFavoriteColorに表示したいと思います。 FavoriteColorは列挙型なので、DropDownStyleをDropDownListに設定しました。しかし、私はこのコンボボックスをバインドして、1)FavoriteColor列挙値を含み、2)comboBoxPeopleから人を選択したときに、SelectedItemとして適切な色を設定する方法を明確にしていません。誰も私にこれについてのアイデアを与えることができますか?どうもありがとう!ちょうどタイプstringとして好きな色を保存し、colorEnum

答えて

2

としてあなたはトムが示唆するように行うことができない、

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

..andは物事を容易にするために:

+0

+1、今日何か新しいことを学んだ –

+0

それは私がそれが欲しいと正確に動作します! :-)そして、同じ週末に2度、私がやろうとしていることをあなたに教えてくれました。あなたに心から感謝します! – user685869

+0

私の喜び。よく書かれた質問をありがとう! –

1

あなたはこれらの線に沿って何かをする必要がありPerson.FavoriteColorを文字列に変更することなく少なくとも1つの簡単な方法があります。

人にプロパティを追加し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

ありがとうございます、それは、色の列挙からの色で設定されたcomboBoxFavoriteColorを取得します。しかし、私はcomboBoxPeopleで人を選択するときに、選択した色をコンボボックスに表示する必要があります。コントロールのValueプロパティをbindingSource1 - Ageにバインドするよう指定するだけで、Ageを自分のNumericUpDownコントロールにマップしました。しかし、それは色のコンボボックスのために働くようには思われない。私は人1を選んで、好きな色を赤に設定することができます。しかし、人2に変更すると、カラーコンボボックスはまだ赤に設定されています。私はそれを更新して、その人の色を表示します。 – user685869

+0

できます。私は答えを投稿します - すぐに戻ってください。 –

関連する問題