2011-02-14 10 views
2

나는 C# .net 윈도우 응용 프로그램에서 일하고 있습니다. 나는 다음을 사용하여 내 winform에 콤보 상자를 채우고 있습니다. 콤보 상자에서 선택한 값을 #

cmbEMPType.DataSource = objEntityManager.EmployeeTypes(); 
cmbEMPType.DisplayMember = "EMPTypeName"; 
cmbEMPType.ValueMember = "EMPTypeId"; 

곳 SQL 서버에 Linq에의 목록을 가져옵니다 관리자 방법 objEntityManager.EmployeeTypes();. 이것은 잘 작동하고 있습니다.

하지만 항목 양식 콤보 상자를 선택하고 단추를 클릭 한 다음 해당 이벤트 ID가 cmbEMPType.SelectedValueEmpType으로 표시됩니다. 왜 이럴까? EmpType 객체를 하나 더 만들고 싶지 않습니다. 단순한 선택 가치가 필요하다. 또한 SelectedIndex와의 신뢰를 유지할 수 없습니다. 매번 항목마다 다를 수 있습니다.

**Edited** 
     public List<EMPType> EmployeeTypes() 
     { 
      List<EMPType> EMPTypeList = null; 
      try 
      { 
       if (CommonDataObject.dataContext.EMPAllTypes.Any()) 
       { 
        EMPTypeList = CommonDataObject.dataContext.EMPAllTypes.ToList(); 
       } 
       return EMPTypeList; 
      } 
      catch 
      { 

       return EMPTypeList; 
      } 

     } 

편집

private void btnSave_Click(object sender, EventArgs e) 
     { 

iEMPTypeId = cmbEMPType.SelectedValue; 
} 

나는 여기 INTE를 받아야합니다. EMPType 객체 생성을 요청합니다.

+0

인가를? 이것은 일반적으로 선택된 개체 (EmpType)를 가져오고, cmbEMPType.SelectedValue는 'ValueMember'에 지정된 속성을 가져옵니다. –

+0

예, 확실합니다. 나는 그것을 세 번 확인했다. 하지만 불행히도 SelectedValue가 있습니다. 실제로 반환 유형을 확인할 수도 있습니다. 그것은 '대상'을 보여줍니다. –

+0

값은 모든 유형 일 수 있으므로 어쨌든 값을 캐스팅해야하므로 항상 객체를 반환합니다. 다른 의견으로 물어 보시면 코드를 게시 해 주시면 진행 상황을보실 수 있습니다. –

답변

1

이것은 정확하고 예상되는 동작이므로 변경할 수 없습니다.

SelectedValue은 속성의 유형을 반환해야합니다. EMPTypeId가 정수이면 정수를 반환해야합니다. 다른 반환 값을 얻는 이유를 알아낼 수 있도록 더 많은 코드를 게시하십시오.

만일 당신이 ID 얻기 위해 다음과 같은 코드가 SelectedItem를 사용하는 경우 : 선택 아무것도 없을 때

int selectedID = (cmbEMPType.SelectedItem as EmpType).EMPTypeId; 

이 경우를 처리하기를 :

object oSelectedEmp = cmbEMPType.SelectedItem; 
int selectedID = oSelectedEmp == null ? -1 : (oSelectedEmp as EmpType).EMPTypeId; 
+0

실제로 틀렸어. SelectedValue는 ValueMember에 지정된 필드 값을 제공해야하며 실제 객체는 절대 사용하지 않아야합니다. ValueMember가 지정되지 않으면 ToString() 표현을 제공합니다. –

+0

@ 새 소식입니다. SelectedItem과 혼동스러워합니다. : | –

+0

@Rewinder : 어떻게이 문제를 파악할 수 있습니까? @ 섀도우 위저드 (Shadow Wizard) : 나는 이것이 내가 제공 한 충분한 코드라고 생각한다. 당신은 무엇을 기대합니까? 사실 정수 값으로 Selected Value를 얻고 싶습니다. 하지만 그것은 EmpType의 객체 유형을 제공하고 있습니다. 왜 이럴까? –

1

문제의 순서입니다 당신의 코드. 첫 번째 줄 코드를 마지막 줄까지 제거하십시오. cmbEMPType.SelectedValue에서 int 값 (iEMPTypeId)을 가져옵니다.

cmbEMPType.DisplayMember = "EMPTypeName"; 
cmbEMPType.ValueMember = "EMPTypeId"; 
cmbEMPType.DataSource = objEntityManager.EmployeeTypes(); 

iEMPTypeId = cmbEMPType.SelectedValue 
0

또 다른 옵션은 EMPType 클래스에서 toString 함수를 재정의하는 것입니다. Edwin de Koning이 명시한 것처럼 "ValueMember가 지정되지 않으면 ToString() 표현을 제공합니다."

같은 뭔가 (나는 순간에 그것을 테스트하지 못할) :

public override string ToString() 
{ 
    return this.ID; 
} 

이 문서 확인하실 수 있습니다 : 당신은 당신이 cmbEMPType.SelectedItem를 사용하지 않는 확인 http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

관련 문제