DataGridView:使用Enum的ComboBox列。从设计师设置的方法?

时间:2012-02-29 21:46:37

标签: c# winforms datagridview

我在DataGridView中有一列,希望它是ComboBox单元格,显示enum的可能值:

public enum SurfaceType {Rough, Smooth, Mirror};

我环顾四周,发现像this这样的文章,这是我想要的结果,但我只是想知道是否有办法从设计师"添加列的模式。这可能吗?

谢谢!

2 个答案:

答案 0 :(得分: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对象本身中。

答案 1 :(得分: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;
}