2011-02-14 11 views
2

私はC#.net Windowsアプリケーションで作業しています。次のように私のwinformにコンボボックスを埋めています。 SQL ServerにLINQのからリストを取得し管理方法でコンボボックスで選択された値はC#

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

どこobjEntityManager.EmployeeTypes();。これは正常に動作しています。

私はアイテムフォームのコンボボックスを選択し、ボタンをクリックしてからボタンをクリックしたイベントでは、私はcmbEMPType.SelectedValueをそのIdではなくEmpTypeとしています。なぜこれは必要ですか?もう1つの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

はあなたがcmbEMPType.SelectedItemを使用していませんか?これは通常、選択されたオブジェクト(EmpType)を取得し、cmbEMPType.SelectedValueは 'ValueMember'で指定されたプロパティを取得します。 –

+0

はい、私は確信しています。私はそれを三度チェックした。残念ながらSelectedValueがあります。実際には戻り値の型もチェックすることができます。それは 'オブジェクト'を示しています。 –

+0

値は任意の型であるため、常にキャストする必要があるため、常にobjectが返されます。私が他のコメントで尋ねたように、コードを投稿してください。何が起きているのかがわかります。 –

答えて

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

もう1つの方法は、EMPTypeクラスのtoString関数をオーバーライドすることです。 Edwin de Koningが「ValueMemberが指定されていない場合、ToString()表現を与えます」と述べています。

ような何か(私は現時点ではそれをテストカント):

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

あなたがこの記事をチェックアウトすることができます:http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

関連する問題