DataGridView связан с DataTable со столбцом Combobox на основе перечисления

Потратив много времени на поиски этого, я должен сдаться.

У меня есть DataGridView, связанный с Datatable. Один из столбцов - это enum, и я хочу, чтобы он отображался как столбец Combobox.

Я нашел эту ссылкуСоздайте параметры выпадающего списка из enum в DataGridView который имеет ответ использования следующего ...

    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
    col.Name = "My Enum Column";
    col.DataSource = Enum.GetValues(typeof(MyEnum));
    col.ValueType = typeof(MyEnum);
    dataGridView1.Columns.Add(col);

Я пробовал это, но когда пользователь создает новую запись, выбирает опцию из выпадающего списка (правильные опции показывают), а затем перемещается за пределы поля, он получает сообщение «Значение DataGridViewComboBoxCel недопустимо». Я нашел несколько решений в поиске, которые говорят о том, как перехватить эту ошибку, а затем ничего не делать (таким образом скрывая ошибку), но я хочу ее решить, а не просто скрыть. Если пользователь подтвердит сообщение, он получит его еще два раза.

Я также видел решения, которые перебирают значения в перечислении и создают таблицу данных, содержащую int и строку для каждого из них, а затем используют таблицу данных в качестве источника данных в комбинированном списке. Я использовал данные в качестве источника для комбинированного списка в прошлом при работе с внутренней базой данных MSSQL.

Еще один вариант - циклически проходить и писать прямо в комбо, такой как этот ...

    foreach (MyEnum bar in MyEnum.GetValues(typeof(MyEnum)))
    {
        string barName = MyEnum.GetName(typeof(MyEnum), bar);
        MyComboColumn.Items.Add(barName);
    }

такой как в вопросе по этой ссылке.Как я могу добавить некоторые значения Enum в комбинированный список

МОЙ ВОПРОС: Можно ли заставить его работать с помощью Enum.GetValues (typeof (MyEnum)); метод? Метод с данными может показаться слишком сложным. Цикл затем с использованием MyComboColumn.Items.Add (barName); также несколько длинная и приводит к тому, что строковая версия перечисления записывается в таблицу данных, а не целое число (и я бы предпочел, чтобы оно было целым числом).

Я не могу найти примеры метода Enum.GetValues (typeof (MyEnum)), где сетка связана с данными. Когда я ищу это, я просто сталкиваюсь с другими методами.

Я думаю, что проблема, скорее всего, заключается в типе данных в столбце базовой таблицы. Я пробовал это как целое число, как строку, и я пытался не определять это. Я не могу думать, что еще примерить на этот тип.

Вот мой упрощенный код. (DVG - это мой DataGridView в форме).

enum EngineType
{
    None = 0,
    EngineType1 = 1,
    EngineType2 = 2
}
public partial class MyClass : Form
{
    DataTable DtTbl;

    public MyClass()
    {
        InitializeComponent();
        CreateTableStructure();
    }

    private void CreateTableStructure()
    {
        DGV.AutoGenerateColumns = false;
        DGV.DataSource = DtTbl;

        DtTbl = new DataTable();

        DtTbl.Columns.Add(new DataColumn("Name", System.Type.GetType("System.String")));
        DataGridViewTextBoxColumn NameCol = new DataGridViewTextBoxColumn();
        NameCol.DataPropertyName = "Name";
        NameCol.HeaderText = "Name";
        DGV.Columns.Add(NameCol);

        DtTbl.Columns.Add(new DataColumn("Engine", System.Type.GetType("System.Int32")));
        DataGridViewComboBoxColumn EngineCol = new DataGridViewComboBoxColumn();
        EngineCol.DataPropertyName = "Engine";
        EngineCol.HeaderText = "Engine";
        //EngineCol.DataSource = EngineType.GetValues(typeof(EngineType));

        foreach (EngineType engine in EngineType.GetValues(typeof(EngineType)))
        {
            string engineName = EngineType.GetName(typeof(EngineType), engine);
            EngineCol.Items.Add(engineName);
        }


        DGV.Columns.Add(EngineCol);

    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос