WinForm循环出comboBox且绑定一同数据源,让comboBox可以单独选择

最近做WinForm遇到个WinForm循环出comboBox且绑定一同数据源时,comboBox一个改变时其他的也同样改变。
我使用的一个解决方案:

1.ComboBox数据源是list时
第一次使用:comboBox1.DataSource = list;  
后面的使用:comboBox1.DataSource = list.ToArray(); 

2.ComboBox数据源是DataSet时
第一次使用: comboBox1.DataSource = ds.Tables[0];      
后面的使用:comboBox1.DataSource = ds.Tables[0].Copy();

示例1:

 int top = 5
 for (int i = 0; i < 5; i++)
 {
   ComboBox cmb = new ComboBox();
   cmb.FormattingEnabled = true;
   cmb.Location = new System.Drawing.Point(210, top);
   cmb.Name = "cmb_" + i;
   cmb.Size = new System.Drawing.Size(121, 20);
   if (top == 5)
   {
      cmb.DataSource = list; //list集合                               
   }
   else
   {
      cmb.DataSource = list.ToArray();                               
   }
   cmb.DisplayMember = "ClassName";
   cmb.ValueMember = "ClassId";
   cmb.DropDownStyle = ComboBoxStyle.DropDownList;
   panel1.Controls.Add(cmb);

   top += 23;
}

示例2:

int top = 5
 for (int j = 0; j < 5; j++)
 {
        ComboBox cmb2 = new ComboBox();
        cmb2.FormattingEnabled = true;
        cmb2.Location = new System.Drawing.Point(210, top2);
        cmb2.Name = "cmb2_" + j;
        cmb2.Size = new System.Drawing.Size(121, 20);
        if (top2 == 5)
        {
          cmb2.DataSource = ds.Tables[0];                               
        }
        else
        {
          cmb2.DataSource = ds.Tables[0].Copy();                                    

        } 
        cmb2.DisplayMember = "ClassName";
        cmb2.ValueMember = "ClassId";
        cmb2.DropDownStyle = ComboBoxStyle.DropDownList;
        panel2.Controls.Add(cmb2);

        top2 += 23;
}

 

 

你可能感兴趣的:(combobox)