2013-08-01 76 views
1

我通常做網絡的東西,所以請原諒對這個話題的任何無知。最優雅的方式來設置組合框的價值

我想從這樣的隱藏代碼做負載的組合框:

 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*/ } 

凡ID是一個i​​nt。在此之後,我想根據值成員設置組合框的選定值。但是,這似乎是棘手的,然後我認爲它應該是。在ASP中,這是非常簡單的

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

我已經簽出一些其他的問題(Q1Q2),這似乎是指由顯示成員設置的值。這是最優雅的方式呢?先謝謝你。

+0

爲什麼使用控件。找?直接語法(如果在同一個類上)工作 – Steve

+1

只是不要使用'ToString()'。與運行字符串的ASP.NET不同,WinForms使用類型敏感的比較。 –

+0

@Steve,爲了公平起見,他說他對這個話題一無所知 - 所以你的評論是相當實在的:) –

回答

2

你說的WinForms,因此,除非組合是另一個類,這應該工作

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

此外,我認爲你已經找到至少一個記錄從查詢

+0

謝謝澄清 –