2013-08-01 2 views
1

저는 대개 웹 물건을 사용하고 있으므로이 항목에 대한 모든 무언가를 용서할 수 있습니다. 값으로 콤보 상자를 설정하는 가장 우아한 방법

는이 같은 코드 숨김에서로드에게 콤보를 할 노력하고있어 : ID가 int를입니다

 using (var con = new SqlConnection(ConStr)) { 
     try { 
      var dt = new DataTable(); 
      var cmd = new SqlCommand("usp_SelectContactDropDown", con) {       
      CommandType = CommandType.StoredProcedure };          

       var adapter = new SqlDataAdapter {SelectCommand = cmd}; 
       adapter.Fill(dt); 
       ((ComboBox) Controls.Find(ddContact, true)[0]).DataSource = dt; 
       ((ComboBox) Controls.Find(ddContact, true)[0]).DisplayMember = "DisplayText"; 
       ((ComboBox) Controls.Find(ddContact, true)[0]).ValueMember = "ID"; 
       ((ComboBox) Controls.Find(ddContact, true)[0]).SelectedIndex = -1; 
      } 
      catch (Exception ex) { MessageBox.Show(ex.ToString()); } 
      finally { /* Handle the error*/ } 

합니다. 이 후 값 멤버를 기반으로 콤보 상자의 선택한 값을 설정하려고합니다. 그러나 이것이 더 까다로워지면 나는 그것이 필요하다고 생각할 것입니다. 좀 다른 질문 디스플레이 멤버로 값을 설정을 참조 할 것 (Q1, Q2)를 체크 아웃 한

 ddContact.SelectedValue = o.fk_ContactID.ToString(); 

ASP에서 이것은 매우 간단합니다. 이것에 대해 가장 우아한 방법은 무엇일까요? 미리 감사드립니다.

+0

왜 당신이 컨트롤을 사용합니까 쿼리에서 적어도 하나 개의 기록을 발견했다고 가정

또한
ddContact.DisplayMember = "DisplayText"; ddContact.ValueMember = "ID"; ddContact.DataSource = dt; ddContact.Value = Convert.ToInt32(dt.Rows[0]["ID"]); 

일을해야한다고 .발견? 직접 구문 (같은 클래스에있는 경우) 작동 – Steve

+1

그냥 ToString()을 사용하지 마십시오. 문자열을 조작하는 ASP.NET과 달리 WinForms는 유형별 비교를 사용합니다. –

+0

@Steve, 공평하게 그는 그 주제에 대해 무지하다고 말했다. 그래서 당신의 의견은 다소 논쟁 거리다. :) –

답변

2

당신은 콤보가 다른 클래스에 있지 않는 한 윈폼, 그래서, 이것은 당신이

+0

그 점을 명확히 해 주셔서 감사합니다. –

관련 문제