带有组合框的datagridview

时间:2009-04-22 18:42:51

标签: c# .net winforms

我创建了两个类:

public class Params : List<Param>
{

}

public class Param
{
    public enum enType
    {
        Integer,
        Double,
        String,
        DateTime
    }

    private string sName_m;
    public string Name
    {
        get { return sName_m; }
        set { sName_m = value; }
    }

    private string sValue_m;
    public string Value
    {
        get { return sValue_m; }
        set { sValue_m = value; }
    }

    private enType eType_m;
    public enType Type
    {
        get { return eType_m; }
        set { eType_m = value; }
    }
}

现在我希望能够在Windows应用程序的网格类型控件中显示Params,因此我将DataGridView拖到我的表单上,并通过选择其他数据源选择数据源 - &gt;项目数据源,然后选择我的参数类(frmMain + Params)。

现在,当我运行应用程序时,我可以添加/删除/编辑记录,网格显示三列。我希望能够做的是将Type列作为下拉列表,让我的选择值在枚举中。目前,我必须键入一个必须与枚举匹配的字符串。可能?

2 个答案:

答案 0 :(得分:1)

我从来没有能够自动数据绑定来正确设置DataGridViewComboBoxCell / DataGridViewComboBoxColumn(也不是CheckBox),因此我将AutoGenerateColumns设置为false并手动设置列。

答案 1 :(得分:1)

您可以禁用自动生成列并手动生成所需的正确列,也可以删除列并在其位置添加新列。

var columns = dataGridView1.Columns;

var oldColumn = columns.Cast<DataGridViewColumn>()
                       .Single(c => c.DataPropertyName == "Type");
var index = columns.IndexOf(oldColumn);

var newColumn = new DataGridViewComboBoxColumn();
newColumn.Name = "Type";
newColumn.DataSource = Enum.GetValues(typeof(Param.enType));
newColumn.ValueType = typeof(Param.enType);

columns.RemoveAt(index);
columns.Insert(index, newColumn);