Ошибка сопоставления EF со списком Winform datagridview

Я пытаюсь составить список выбора, используя поле со списком datagridview, список отображается правильно, но при его выборе выдается ошибка типа/приведения. Он дает строку, но ожидает тип объекта MyProduct.

Ошибка Недопустимое преобразование из System.String в MyProduct

   private void frmtest_Load(object sender, EventArgs e)
    {
        var products = new BindingList<MyProduct>()
        {
        new MyProduct(){ID =1,Name="Product1"       },
        new MyProduct(){ID =2,Name="Product2"       },
        new MyProduct(){ID =4,Name="Product3"       },
        new MyProduct(){ID =5,Name="Product4"       }

        };
        MyProduct.DataSource= products;//comboboxcolumn datasource

    }


public class MyProduct
{
    public MyProduct()
    {

    }
    public int ID { get; set; }
    public string Name { get; set; }
    public string Specification { get; set; }
    public override string ToString()
    {
        return Name;
    }
}
public class MyPurchaseItem
{
    public MyPurchaseItem()
    {

    }
    public int ID { get; set; }
    public virtual MyProduct MyProduct { get; set; }
    public int qty { get; set; }
    public decimal Price { get; set; }
}

person user3658516    schedule 03.06.2016    source источник


Ответы (1)


После прочтения различных ответов удалось решить эту проблему, добавив метод для возврата того же объекта.

Для этого требуется, чтобы nethod возвращал сам объект, который можно присвоить ValueMember, а затем установить displaymember.

public MyProduct()
    {

    }
    public int ID { get; set; }
    public string Name { get; set; }
    public string Specification { get; set; }
    ***public MyProduct Self { get { return this; }  }***
    public override string ToString()
    {
        return Name;
    }

//datagridcombobox changed as below
        MyProduct.DataPropertyName = "MyProduct";
        MyProduct.ValueMember = "Self";
        MyProduct.DisplayMember = "Name";
person user3658516    schedule 03.06.2016
comment
Было бы проще, если бы вы включили внешние ключи в свою модель, а затем привязали поле со списком к MyProductId - person Reza Aghaei; 03.06.2016