2013-04-09 3 views
4

데이터 모델 엔터티를 publishingCompanyEntities이라는 프로젝트에 추가하고 ComboBox를 내 winform에 추가했습니다. 하지만 난 내 콤보 상자에 저자의 내 목록을 바인딩 할 때 데이터 소스가 데이터로 채워 된 바와 같이,하지만 cmoAuthors.Items.Count 0을 반환하지만 cmoAuthors.DataSource.Count 수익률이 항목은ComboBox 데이터 소스 및 엔터티 FrameWork

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

'cmoAuthors.Invalidate()'를 호출하고'Items.Count'가 업데이트되었는지 확인하십시오. –

+0

아니요, 아직 0을 반환합니다. winform의 comboBox도 비어 있습니다! –

+0

소스를 다음과 같이 변경하면 어떻게됩니까 :'publishContext.Authors.ToList()' –

답변

12

당신은 저자 EntitySet에 .ToList()를 추가해야합니다.

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

이유는 EntitySet하지 실제 지점 컬렉션 점이다. 그것은 쿼리 (IQueryable)이며 ComboBox가이를 감지 할만큼 똑똑하지 않은 것 같습니다.

ToList()으로 전화하면 publishContext.Authors을 개체로 구체화합니다.

어떤 이유로 ComboBox는 Items 컬렉션을 업데이트하지 않으며 새 데이터 소스가 감지됩니다. Invalidate()은 컨트롤이 iself를 다시 그리며 프로세스에서 Items 컬렉션을 업데이트하도록합니다.

+0

Invalidate()를 사용하지 않더라도 괜찮습니까? –

+0

@ r.hamd 글쎄, ** 메신저 ** 당신을 강제하지 않을 :) 오직 당신이 당신의 senario에서 최고인지 알아. –

2

당신은 valuemember 속성을 제공해야합니다. ValueMember

cmoAuthors.DisplayMember = "FirstName"; 
cmoAuthors.ValueMember = "yourValueProperty"; 
관련 문제