我在DataGridView
中有一列,希望它是ComboBox
单元格,显示enum
的可能值:
public enum SurfaceType {Rough, Smooth, Mirror};
我环顾四周,发现像this这样的文章,这是我想要的结果,但我只是想知道是否有办法从设计师"添加列的模式。这可能吗?
谢谢!
答案 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;
}