2013-04-09 60 views
4

我将数据模型实体添加到名为publishingCompanyEntities的项目并在我的winform中添加了ComboBox。 但是当我想我的作者名单绑定到我的组合框中数据源已经充满了数据,但cmoAuthors.Items.Count返回0,但cmoAuthors.DataSource.Count回报2项组合框数据源和实体框架

 publishContext = new publishingCompanyEntities(); 
     cmoAuthors.DataSource = publishContext.Authors; 
     cmoAuthors.DisplayMember = "FirstName"; 
+0

尝试调用'cmoAuthors.Invalidate()',然后检查是否更新了'Items.Count'。 – 2013-04-09 09:51:54

+0

不,它返回0,winform中的comboBox也是空的! – 2013-04-09 09:58:42

+0

如果将源更改为:'publishContext.Authors.ToList()' – 2013-04-09 10:01:06

回答

12

您需要添加.ToList()到作者EntitySet的。

publishContext = new publishingCompanyEntities(); 
     cmoAuthors.DataSource = publishContext.Authors.ToList(); 
     cmoAuthors.DisplayMember = "FirstName"; 
     cmoAuthors.Invalidate(); 

的原因是,一个EntitySet的是一个实际的集合。这是一个查询(IQueryable),似乎ComboBox不够聪明来检测。

调用ToList()publishContext.Authors实现为对象。

出于某种原因,ComboBox不会更新它Items集合,然后检测到新的数据源。 Invalidate()强制控件重绘,并在此过程中更新其Items集合。

+0

是否可以,如果我不使用Invalidate()? – 2015-08-31 11:15:30

+0

@ r.hamd好,** im **不会强迫你:)只有你知道什么是最好的在你的senario。 – 2015-08-31 16:04:59

2

您需要提供valuemember财产。 ValueMember

cmoAuthors.DisplayMember = "FirstName"; 
cmoAuthors.ValueMember = "yourValueProperty";