Я согласен, что похоже, что вы добавляете один и тот же элемент управления снова и снова, что вызывает конфликт имен. Кроме того, похоже, что вы добавляете элементы управления в коллекции элементов управления других элементов управления в неправильном порядке. Например, вы добавляете в следующем порядке:
TableHeaderRow h = new TableHeaderRow();
TableHeaderCell hc1 = new TableHeaderCell();
hc1.Text = "Item Description";
h.Cells.Add(hc1);
TableHeaderCell hc2 = new TableHeaderCell();
hc2.Text = "Item Price";
h.Cells.Add(hc2);
TableHeaderCell hc3 = new TableHeaderCell();
hc3.Text = "Item Quantity";
h.Cells.Add(hc3);
TableHeaderCell hc4 = new TableHeaderCell();
hc4.Text = "Item Sub Total";
h.Cells.Add(hc4);
Table1.Rows.Add(h);
Когда вы действительно должны добавить в этом порядке:
TableHeaderRow h = new TableHeaderRow();
Table1.Rows.Add(h);
TableHeaderCell hc1 = new TableHeaderCell();
h.Cells.Add(hc1);
hc1.Text = "Item Description";
TableHeaderCell hc2 = new TableHeaderCell();
h.Cells.Add(hc2);
hc2.Text = "Item Price";
TableHeaderCell hc3 = new TableHeaderCell();
h.Cells.Add(hc3);
hc3.Text = "Item Quantity";
TableHeaderCell hc4 = new TableHeaderCell();
h.Cells.Add(hc4);
hc4.Text = "Item Sub Total";
Как правило, я всегда стараюсь как можно скорее добавить новый элемент управления в родительскую коллекцию элементов управления, чтобы гарантировать, что любые дочерние элементы управления наследуют правильный UniqueID. Если вы создадите новый Control X и начнете добавлять его в X.Controls ДО добавления X в родительскую коллекцию Controls, тогда дочерние элементы управления могут не наследовать правильный UniqueID.