2010-10-27 10 views
2

Cela semble être une tâche simple, mais il peut y avoir un moyen plus simple.Lier plusieurs ComboBox sur un formulaire C#

J'ai un formulaire avec 30 combobox qui ont tous besoin du même ensemble de données. Actuellement, je lie chacun:

DataTable t = GetData(); 

this.ComboBox1.DataSource = t; 
this.ComboBox1.DisplayMember = "heading"; 

this.ComboBox2.DataSource = t; 
this.ComboBox2.DisplayMember = "heading"; 

this.ComboBox3.DataSource = t; 
this.ComboBox3.DisplayMember = "heading"; 

... 
... 

this.ComboBoxN.DataSource = t; 
this.ComboBoxN.DisplayMember = "heading"; 

est-il un moyen de les lier tous dans une moindre mode Tedius?

Merci.

Répondre

3
foreach (var control in this.Controls) 
{ 
    if (control is (ComboBox)) 
    { 
     ((ComboBox)control).DataSource = t; 
     ((ComboBox)control).DisplayMember = "heading"; 
    } 
} 
+1

Ça sonne bien ... à moins que toutes les listes déroulantes ne soient liées au même ensemble (c'est-à-dire s'il y a 33 comboboxes, et 3 d'entre elles ne le sont pas lié au même contrôle). Dans ce cas, j'envelopperais les 30 qui sont liés à la même source dans un conteneur quelconque, par exemple un FlowLayoutPanel ou un autre contrôle de type panneau. –

+0

Super exactement ce dont j'avais besoin merci. – Steve

+0

@Steve Si c'est ce que vous cherchez, vous devez marquer la réponse comme acceptée avec la coche. – McKay

0
private void bindIt(ComboBox c) 
{ 
    c.DataSource = t; 
    c.DisplayMember = "heading"; 
} 

private void bindThemAll() 
{ 
    bindIt(this.ComboBox1); 
    bindIt(this.ComboBox2); 
    bindIt(this.ComboBox3); 
    ... 
    bindIt(this.ComboBoxN); 
} 

De cette façon, vous n'êtes pas courir le risque de se lier à un contrôle qui n'est pas censé être lié. Oui, beaucoup de répétitions, mais ...