2012-06-29 78 views

回答

12

將它們分別綁定到DataSet1.Table [0]的單獨實例。

即)

foreach (Control c in this.Controls) 
{ 
    if (c is ComboBox) 
    { 
     DataTable dtTemp = DataSet1.Tables[0].Copy(); 
     (c as ComboBox).DataSource = dtTemp 
     (c as ComboBox).DisplayMember = "Articles"; 
    } 
} 
+0

Thankyou GrandMaster。解決了。 – Alegro

+0

很高興我能幫到你。 – GrandMasterFlush

+1

根據ComboBox的數量和DataTable中的數據量,這可能會導致應用程序的內存佔用大量增加,這是由於數據的重複。 – cadrell0

6

一個更好的方法是使用一個DataView,以避免重複的數據。另外,如果可以避免,則不要多次投射。

foreach (Control c in this.Controls) 
{ 
    ComboBox comboBox = c as ComboBox; 

    if (comboBox != null) 
    {   
     comboBox.DataSource = new DataView(DataSet1.Tables[0]); 
     comboBox.DisplayMember = "Articles"; 
    } 
} 

編輯

我才意識到你可以用LINQ

foreach (ComboBox comboBox in this.Controls.OfType<ComboBox>()) 
{ 
    comboBox.DataSource = new DataView(DataSet1.Tables[0]); 
    comboBox.DisplayMember = "Articles"; 
} 
+0

這是一個更好的方法來做到這一點。被接受的答案會有更大的內存佔用。 – SQLMason

1

更清潔爲此,我面臨同樣的問題,但我與仿製藥的工作。我已經使用了組合框的綁定上下文來擺脫這種情況。 (當你不知道綁定列表的大小時非常有用 - 在你的情況下它是5項)

在下面的代碼中,DisplayBindItem只是一個包含Key和Value的類。

List<DisplayBindItem> cust = (from x in _db.m01_customers 
      where x.m01_customer_type == CustomerType.Member.GetHashCode() 
      select new DisplayBindItem 
      { 
       Key = x.m01_id.ToString(), 
       Value = x.m01_customer_name 
      }).ToList(); 

    cmbApprover1.BindingContext = new BindingContext(); 
    cmbApprover1.DataSource = cust; 
    cmbApprover1.DisplayMember = "Value"; 
    cmbApprover1.ValueMember = "Key"; 

    //This does the trick :) 
    cmbApprover2.BindingContext = new BindingContext(); 
    cmbApprover2.DataSource = cust ; 
    cmbApprover2.DisplayMember = "Value"; 
    cmbApprover2.ValueMember = "Key"; 

該類供您參考。

public class DisplayBindItem 
    { 
     private string key = string.Empty; 

    public string Key 
    { 
     get { return key; } 
     set { key = value; } 
    } 
    private string value = string.Empty; 

    public string Value 
    { 
     get { return this.value; } 
     set { this.value = value; } 
    } 

    public DisplayBindItem(string k, string val) 
    { 
     this.key = k; 
     this.value = val; 
    } 

    public DisplayBindItem() 
    { } 
} 

如果這能解決您的問題,請標記爲答案。

相關問題