我有这段代码:
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;
}
}
我将此方法称为:
private void frmBillIn_Load(object sender, EventArgs e)
{
FillCombobox();
}
当我运行我的应用程序时,组合框将不会显示客户(项目)。
只显示 Model.Customer
问题是什么?
我尝试了很多解决方案,但没有解决方案。
答案 0 :(得分:7)
您不必混合两个世界,即Entity Framework的世界和DataSet的世界。直接绑定:
using (InventoryEntities c = new InventoryEntities(Properties.Settings.Default.Connection))
{
comboBox1.DataSource = c.Customers;
comboBox1.ValueMember = "id";
comboBox1.DisplayMember = "name";
}
如果这不起作用,那么列名可能与“name”(“Name”或许?)不同。
答案 1 :(得分:5)
如果使用“using”,则需要在关闭连接之前放置ToList()以进行评估。 使用ItemsSource,ValueMember和DisplayMember区分大小写
using (InventoryEntities c = new InventoryEntities())
{
comboBox1.ItemsSource = c.Customers.toList();
comboBox1.ValueMemberPath = "Id";
comboBox1.DisplayMemberPath = "Name";
}
希望得到这个帮助。
答案 2 :(得分:0)
参考以下示例。 (name references =&gt; DAL =数据访问层,projectEntities =实体集名称) 希望这会有所帮助..
列出itemsList = new List();
using (DAL.projectEntities en = new DAL.projectEntities())
{
foreach (var item in en.tableName.Where(a => a.tableName != null).ToList())
{
itemsList.Add(item.tableFieldName);
}
}
comboboxTable.ItemsSource = itemsList;
答案 3 :(得分:0)
在当前版本的WinForms中,我发现它可以正常工作
RentalsEntities1 db = new RentalsEntities1();
List<SiteSeeingLocation> ssloc = db.SiteSeeingLocations.ToList();
cbSites.DataSource = ssloc;
cbSites.ValueMember = "id";
cbSites.DisplayMember = "ssLocation";