2013-08-01 6 views
1

Je fais habituellement des trucs sur le Web afin de pardonner toute ignorance sur le sujet.La façon la plus élégante de définir ComboBox par valeur

Je suis en train de faire de la charge d'un combobox du codebehind comme ceci:

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

Où ID est un entier. Après cela, je veux définir la valeur sélectionnée de la zone de liste déroulante en fonction du membre de la valeur. Cependant, cela semble être plus difficile alors je pense qu'il doit être. Dans ce asp est assez simple

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

J'ai vérifié d'autres questions (Q1, Q2) qui semblent se référer à la mise en valeur par l'organe d'affichage. Quel est le moyen le plus élégant de s'y prendre? Merci d'avance.

+0

Pourquoi utilisez-vous des contrôles .Trouver? la syntaxe directe (si sur la même classe) fonctionne – Steve

+1

N'utilisez simplement pas 'ToString()'. Contrairement à ASP.NET, qui utilise des chaînes, WinForms utilise une comparaison sensible au type. –

+0

@Steve, pour être juste, il a dit qu'il était ignorant sur le sujet - et donc votre commentaire est plutôt théorique :) –

Répondre

2

Vous dites WinForms, donc, à moins que le combo est dans une autre classe, cela devrait fonctionner

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

Je suppose également que vous avez trouvé au moins un enregistrement de votre requête

+0

merci de préciser que –

Questions connexes