First of all it is not the problem of TableLayoutPane nor even dynamic combobox rather problem of datasource you've chosen.This problem has been created because of use same datasource.
Normally if you use List as Combobox datasourcs.however to overcome this you can use
a simple dictionary and it won't behave so.Therefore you may use Dictionary as you Combobox datasource so that one combobox cannot mimic the other.Sample given below:
public Form1()
{
InitializeComponent();
Dictionary<string,string> dicProduct = new Dictionary<string,string>();
Product p1 = new Product();
p1.ProductName = "AAA";
p1.barCode = "092132313";
Product p2 = new Product();
p2.ProductName = "AAB";
p2.barCode = "092132312";
Product p3 = new Product();
p3.ProductName = "AAC";
p3.barCode = "092132311";
Product p4 = new Product();
p4.ProductName = "AAD";
p4.barCode = "092132310";
dicProduct.Add(p1.barCode, p1.ProductName);
dicProduct.Add(p2.barCode, p2.ProductName);
dicProduct.Add(p3.barCode, p3.ProductName);
dicProduct.Add(p4.barCode, p4.ProductName);
ComboBox combo1 = new ComboBox();
ComboBox combo2 = new ComboBox();
combo1.DataSource = new BindingSource(dicProduct,null);
combo1.DisplayMember = "Value";
combo1.ValueMember = "key";
combo2.DataSource = new BindingSource(dicProduct, null);
combo2.DisplayMember = "Key";
combo2.ValueMember = "Value";
tableLayoutPanel1.Controls.Add(combo1, 0, 0);
tableLayoutPanel1.Controls.Add(combo2, 1, 0);
}
class Product
{
public string ProductName { get; set; }
public string barCode { get; set; }
}
Hope this helps!happy Coding! :)