2009-04-30 49 views
4

私はすなわちComboBoxは列挙型の値にバインドされており、「空白」のエントリもありますか?

各列挙型の値を一致するエントリに加えて、私はまた、空白のエントリを持つことができ、一方で、私は同じ結果を得ることができる方法を知っている
combo1.DropDownStyle = ComboBoxStyle.DropDownList; 
combo1.DataSource = Enum.GetValues(typeof(myEnumType)); 

、列挙型の値にWinFormsのコンボボックスをバインドする場合選択を表さない?

enum型に特別な値を追加することはできません。これは、任意の列挙型を処理するには柔軟でなければならないためです。

ご協力いただきありがとうございます。

編集:実際の列挙値ではなく名前をバインドする必要があることを明確にする必要があります。実際の列挙値がバインドされている場合、ComboBoxはToString()を呼び出して表示するテキストを取得します。

+0

ここでは、これはASP.NETではなくWinFormsです。 DataSourceが設定されたら、WinFormsのComboBoxに項目を追加することはできません。 –

答えて

1

public static string[] GetEnumValues<T>(bool includeBlank) 
{ 
    List<string> values = new List<string>((Enum.GetValues(typeof(T)) as T[]).Select(t => t.ToString())); 

    if (includeBlank) 
    { 
     values.Insert(0, string.Empty); 
    } 

    return values.ToArray(); 
} 

を(私は文字列のコレクションにバインドしたくないことを明確に質問には私の編集を参照してください)。

多くの手品をした後、次のような怪物が働いているようです。 combo1.SelectedItemはオブジェクト型であり、DBNullまたはボックス化された列挙型の値になります。このコードはお勧めですか?

combo1.DataSource = (new object[] { DBNull.Value } 
         .Concat(Enum.GetValues(refToAnEnumType) 
          .Cast<object>())).ToList() 

編集:私はアダムとアンドリューの方法は、簡単に同じことを行うように適合させることができる参照。みんなありがとう!

+0

null値を選択したい場合、どうすればよいですか? DBNullはEnumに存在しないので、どの値を選択すべきですか? –

3

あなたはこのような何かを試みることができる:これは、あなたがこのように、この関数の結果にバインドすることができます

(Brad_Zの優れた提案を反映するように編集

static IEnumerable<String> getValues<T>(String initialValue) 
{ 
    yield return initialValue; 

    foreach (T t in Enum.GetValues(typeof(T))) 
     yield return t.ToString(); 
} 

static IEnumerable<String> getValues<T>() 
{ 
    return getValues<T>(String.Empty); 
} 

を:

combo1.DataSource = getValues<myEnumType>().ToArray(); 

などのように、最初の項目に別の値を指定する場合は、

combo1.DataSource = getValues<myEnumType>("Select").ToArray(); 
+2

良い答え。空白の項目のテキストを指定できるように、getValues関数にパラメータを追加します。あなたは言うことができる:getValues ( "猫を選択")。ToArray(); –

+0

優秀な提案!私はそれを含めるように編集しました。 :) –

+0

あなたのポストをありがとう - それは私が望む実際の列挙値であり、名前の文字列表現ではありません:-) – xyz

4

あなたが投稿したコードのすべてを試しても、データバインドされたComboBoxを追加することはできません。これはWPFではなくwinformsなので、 "DataBind"関数はありません。あなたがこれを行うことができ

:次に

combo.DataSource = GetEnumValues<myEnumType>(true); 
+0

今私は特定の条件でnull値を選択したい場合はどうすればよいですか?それ? DBNullはEnumに存在しないので、どの値を選択すべきですか? –

関連する問題