2012-02-29 6 views
0

私はDataGridViewに1列があり、それはenumのために可能な値を表示するComboBoxセルになりたい:DataGridView:列挙型を使用するComboBox列。デザイナーからセットアップする方法?

public enum SurfaceType {Rough, Smooth, Mirror}; 

私は周りを見回したと私は希望の結果であるthisのような記事を見つけましたが、私列を追加する「デザイナー」モードからこれを設定する方法があるのか​​どうか疑問に思っていました。これは可能ですか?

ありがとうございます!

答えて

0

私は単純なデータ型を使用し、ctorをプライベートにします。

public class SurfaceType 
{ 
    public static SurfaceType Rough = new SurfaceType{Id=1, Description="Rough"}; 
    public static SurfaceType Smooth = new SurfaceType{Id=2, Description="Smooth"}; 
    public static SurfaceType Mirror = new SurfaceType{Id=3, Description="Mirror"}; 

    private SurfaceType() 
    { 
    } 

    public int Id {get private set;} 
    public string Description {get private set;} 

    //override equality and hashcode is necessary. 
} 

このアプローチのもう一つの素晴らしい点は、SurfaceTypeオブジェクト自体の中で関数をカプセル化できることです。

+0

私はWindowsフォームデザイナからデータバインドを設定できるかどうかを質問していますが、この回答では対応していません。 – kevev22

+0

enumを値とテキストに変換するいくつかのヘルパーメソッドを使うことができますが、それはその価値よりも面倒です。列挙型の代わりに使用できます。それでも同じ論理機能を提供します。 @buckの応答はこれだけです。 –

0

デザイナを使用してテンプレートにドロップダウンを追加し、ドロップダウンをビジネスオブジェクトデータソースにバインドすることができます。しかし、列挙型を囲むコードは少し必要です。ヘルパークラスでこのようなものが動作します。

public static DataSet GetEnums() 
{ 
    DataSet data = new DataSet(); 
    DataTable table = new DataTable(); 
    table.Columns.Add("Name"); 
    table.Columns.Add("ID"); 
    data.Tables.Add(table); 

    DataRow r; 

    foreach (SurfaceType st in Enum.GetValues(typeof(SurfaceType))) 
    { 
     r = data.Tables[0].NewRow(); 
     r["Name"] = st.ToString(); 
     r["ID"] = (int)st; 
     data.Tables[0].Rows.Add(r); 
    } 
    return data; 
} 
関連する問題