2010-10-27 59 views
2

这似乎是一个简单的任务,但可能有一个更简单的方法。在窗体C上绑定多个ComboBox#

我有一个30个组合框的表单,都需要相同的数据集。目前,我结合每个人:

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"; 

是否有约束他们都在一个较小tedius时尚的方式?

谢谢。

回答

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

听起来不错...除非不是所有的组合框都绑定到相同的集合(即,如果有33个组合框,并且其中3个不是绑定到相同的控件)。在这种情况下,我会将绑定到相同源的30个封装在某种容器中,例如FlowLayoutPanel或其他面板类型的控件。 – 2010-10-27 15:11:17

+0

正是我所需要的,非常感谢。 – Steve 2010-10-27 15:12:40

+0

@Steve如果这是你要找的东西,你应该用答复标记标记答案。 – McKay 2010-10-27 15:14:44

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); 
} 

这样的话,你没有运行的结合是不应该约束的任何控制风险。是的,很多重复,但... ...