If you want to generate runtime control with your page and you want to maintain viewstate for generated runtime control.
you have to do these things.
first create container control on aspx page like:
now on .cs you have to write to generate control and add control to this table Table1.
first create two static variable at class
public static int NoOfRows = 5;
public static int ctlID = 0;
now write a function to create control
public void createTable()
{
try
{
// Total number of cells per row (columns).
int cellCtr;
// Current cell counter
int cellCnt;
//rowCnt = row;
cellCnt = 4;
DataTable objDT = new DataTable();
objDT = clsInspection.Get_Faults();
for (int Counter = 1; Counter <= NoOfRows; Counter++)
{
// Create new row and add it to the table.
TableRow tRow = new TableRow();
Table1.Rows.Add(tRow);
for (cellCtr = 1; cellCtr <= cellCnt; cellCtr++)
{
// Create a new cell and add it to the row.
TableCell tCell = new TableCell();
if (cellCtr == 1)
{
DropDownList ddl = new DropDownList();
ddl.ID = “ddl_” + ctlID.ToString();
ddl.Width = 170;
ddl.CssClass = “dropdown”;
ddl.DataSource = objDT;
ddl.DataTextField = “Faults”;
ddl.DataValueField = “Fault_ID”;
ddl.DataBind();
ddl.Items.Insert(0, “Select Faults”);
tCell.Controls.Add(ddl);
}
else
{
TextBox txt = new TextBox();
txt.ID = “txt_” + ctlID.ToString();
txt.CssClass = “textbox”;
txt.Width = 170;
tCell.Controls.Add(txt);
}
tRow.Cells.Add(tCell);
ctlID++;
}
}
}
catch (Exception ex)
{
//lblErrorMessage.Text = “Error : ” + ex.Message.ToString();
//mdlPopup.Show();
}
}
now for maintaine viewstate you have to override method
protected override void CreateChildControls()
{
// Here we are recreating controls to persist the ViewState on every post back
if (Page.IsPostBack)
{
ctlID = 0;
NoOfRows += 1;
createTable();
}
else
{
createTable();
NoOfRows = 5;
}
}
the above method will maintane viewstate for your created control.
There will be a button on your page and after clicking on that button one new row will be crete with controls in Table1.