如何从Entity Framework向Combobox添加项目?

Sal*_*leh 4 c# combobox entity-framework

我有这个代码:

    private void FillCombobox()
    {
        using (InventoryEntities c = new InventoryEntities(Properties.Settings.Default.Connection))
        {
            List<Customer> usepurposes = c.Customers.ToList();
            DataTable dt = new DataTable();
            dt.Columns.Add("id");
            dt.Columns.Add("name");
            foreach (Customer usepurpose in usepurposes)
            {
                dt.Rows.Add(usepurpose.id, usepurpose.name);
            }
            comboBox1.ValueMember = dt.Columns[0].ColumnName;
            comboBox1.DisplayMember = dt.Columns[1].ColumnName;
            comboBox1.DataSource = dt;

        }
    }
Run Code Online (Sandbox Code Playgroud)

我将此方法称为:

    private void frmBillIn_Load(object sender, EventArgs e)
    {
        FillCombobox();
    }
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,组合框将不会显示客户(项目).

只显示Model.Customer

问题是什么??

我尝试了很多解决方案,但没有解决方案.

Wik*_*hla 7

您不必混合两个世界,实体框架的世界和DataSet的世界.直接绑定:

    using (InventoryEntities c = new InventoryEntities(Properties.Settings.Default.Connection))
    {
        comboBox1.DataSource    = c.Customers;
        comboBox1.ValueMember   = "id";
        comboBox1.DisplayMember = "name";
    }
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么列名可能与"name"("Name"或许?)不同.

  • 我不确定这是否与我的代码有关,但我不得不将DataSource更改为:`c.Customers.ToList();' (2认同)

Xil*_*iki 5

如果使用"using",则需要在关闭连接之前放置ToList()以进行求值.使用ItemsSource,ValueMember和DisplayMember区分大小写

using (InventoryEntities c = new InventoryEntities())
    {
        comboBox1.ItemsSource   = c.Customers.toList();
        comboBox1.ValueMemberPath   = "Id";
        comboBox1.DisplayMemberPath = "Name";
    }
Run Code Online (Sandbox Code Playgroud)

希望这有帮助.