I have to dynamically create controls and add them to a table. In a button click I need to find the value entered for that control. The control ids are also dynamic. Below is the code I tried.
private void createUdfControls()
{
colUdfNames.Clear();//this is a collection object.
//the from id for gl is 3.
colUdfNames = BL_GeneralLedger.GetAllUdfNames(3);
if (colUdfNames.Count>0)
{
TableRow tr1 = null; ;
for(int i=0;i<colUdfNames.Count;i++)
{
TableRow tr;
if(i%2==0)
{
tr = new TableRow();
tr1 = tr;
}
string udfTypeValue = colUdfNames[i].UdfTypeValue;
int EnumUdfTypeId = colUdfNames[i].Enum_UdfTypeId;
TableCell cellUdf1 = new TableCell();
TableCell cellUdfValue1 = new TableCell();
TableCell cellUdf2 = new TableCell();
TableCell cellUdfValue2 = new TableCell();
switch (EnumUdfTypeId)
{
case 1:
{
//Text
if (i % 2 == 0)
{
cellUdf1.Text = colUdfNames[i].UdfName;
TextBox txtText = new TextBox();
txtText.ID = "txtText" + colUdfNames[i].UdfId;
txtText.MaxLength = colUdfNames[i].Width;
txtText.Text = "ww";
cellUdfValue1.Controls.Add(txtText);
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
TextBox txtText = new TextBox();
txtText.ID = "txtText" + colUdfNames[i].UdfId;
txtText.MaxLength = colUdfNames[i].Width;
txtText.Text = "ww";
cellUdfValue2.Controls.Add(txtText);
}
break;
}
case 2:
{
//Number
if(i%2==0)
{
cellUdf1.Text = colUdfNames[i].UdfName;
TextBox txtNumber = new TextBox();
txtNumber.ID = "txtNumber" + colUdfNames[i].UdfId;
txtNumber.MaxLength = colUdfNames[i].Width;
txtNumber.Text = "12";
cellUdfValue1.Controls.Add(txtNumber);
DataRow dr = dtUdfControlInfo.NewRow();
dr[0] = txtNumber.ID;
dtUdfControlInfo.Rows.Add(dr);
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
TextBox txtNumber = new TextBox();
txtNumber.ID = "txtNumber" + colUdfNames[i].UdfId;
txtNumber.MaxLength = colUdfNames[i].Width;
txtNumber.Text = "12";
cellUdfValue2.Controls.Add(txtNumber);
DataRow dr = dtUdfControlInfo.NewRow();
dr[0] = txtNumber.ID;
dtUdfControlInfo.Rows.Add(dr);
}
break;
}
case 3:
{
//Decimal
if(i%2==0)
开发者_StackOverflow社区 {
cellUdf1.Text = colUdfNames[i].UdfName;
TextBox txtDecimal = new TextBox();
txtDecimal.ID = "txtDecimal" + colUdfNames[i].UdfId;
txtDecimal.MaxLength = colUdfNames[i].Width;
txtDecimal.Text = "2.2";
cellUdfValue1.Controls.Add(txtDecimal);
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
TextBox txtDecimal = new TextBox();
txtDecimal.ID = "txtDecimal" + colUdfNames[i].UdfId;
txtDecimal.MaxLength = colUdfNames[i].Width;
txtDecimal.Text = "2.2";
cellUdfValue2.Controls.Add(txtDecimal);
}
break;
}
case 4:
{
//Memo
if(i%2==0)
{
cellUdf1.Text = colUdfNames[i].UdfName;
TextBox txtMemo = new TextBox();
txtMemo.TextMode = TextBoxMode.MultiLine;
txtMemo.ID = "txtMemo" + colUdfNames[i].UdfId;
txtMemo.MaxLength = colUdfNames[i].Width;
txtMemo.Text = "memo";
cellUdfValue1.Controls.Add(txtMemo);
DataRow dr = dtUdfControlInfo.NewRow();
dr[0] = txtMemo.ID;
dtUdfControlInfo.Rows.Add(dr);
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
TextBox txtMemo = new TextBox();
txtMemo.TextMode = TextBoxMode.MultiLine;
txtMemo.ID = "txtMemo" + colUdfNames[i].UdfId;
txtMemo.MaxLength = colUdfNames[i].Width;
txtMemo.Text = "memo";
cellUdfValue2.Controls.Add(txtMemo);
DataRow dr = dtUdfControlInfo.NewRow();
dr[0] = txtMemo.ID;
dtUdfControlInfo.Rows.Add(dr);
}
break;
}
case 5:
{
//date
if(i%2==0)
{
cellUdf1.Text = colUdfNames[i].UdfName;
TextBox txtDate = new TextBox();
txtDate.ID = "txtDate" + colUdfNames[i].UdfId;
txtDate.MaxLength = colUdfNames[i].Width;
txtDate.Text = "12.07.2010";
cellUdfValue1.Controls.Add(txtDate);
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
TextBox txtDate = new TextBox();
txtDate.ID = "txtDate" + colUdfNames[i].UdfId;
txtDate.MaxLength = colUdfNames[i].Width;
txtDate.Text = "12.07.2010";
cellUdfValue2.Controls.Add(txtDate);
}
break;
}
case 6:
{
//Datetime
if(i%2==0)
{
cellUdf1.Text = colUdfNames[i].UdfName;
TextBox txtDateTime = new TextBox();
txtDateTime.ID = "txtDateTime" + colUdfNames[i].UdfId;
txtDateTime.MaxLength = colUdfNames[i].Width;
txtDateTime.Text = "12.07.2010";
cellUdfValue1.Controls.Add(txtDateTime);
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
TextBox txtDateTime = new TextBox();
txtDateTime.ID = "txtDateTime" + colUdfNames[i].UdfId;
txtDateTime.MaxLength = colUdfNames[i].Width;
txtDateTime.Text = "12.07.2010";
cellUdfValue2.Controls.Add(txtDateTime);
}
break;
}
case 7:
{
//"Dropdown"
if(i%2==0)
{
cellUdf1.Text = colUdfNames[i].UdfName;
DropDownList ddlDropDown = new DropDownList();
ddlDropDown.ID = "ddlDropDown" + colUdfNames[i].UdfId;
cellUdfValue1.Controls.Add(ddlDropDown);
LoadUdfList(ddlDropDown, colUdfNames[i].UdfId);
if (colUdfNames[i].IsMandatory)
{
ddlDropDown.Items.Insert(0, new ListItem("Select " + colUdfNames[i].UdfName, "0", true));
}
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
DropDownList ddlDropDown = new DropDownList();
ddlDropDown.ID = "ddlDropDown" + colUdfNames[i].UdfId;
cellUdfValue2.Controls.Add(ddlDropDown);
LoadUdfList(ddlDropDown, colUdfNames[i].UdfId);
if (colUdfNames[i].IsMandatory)
{
ddlDropDown.Items.Insert(0, new ListItem("Select " + colUdfNames[i].UdfName, "0", true));
}
}
break;
}
case 8:
{
//"Checkbox"
if(i%2==0)
{
cellUdf1.Text = colUdfNames[i].UdfName;
CheckBox ChkBox = new CheckBox();
ChkBox.ID = "ChkBox" + colUdfNames[i].UdfId;
ChkBox.Checked = true;
cellUdfValue1.Controls.Add(ChkBox);
}
else
{
cellUdf2.Text = colUdfNames[i].UdfName;
CheckBox ChkBox = new CheckBox();
ChkBox.ID = "ChkBox" + colUdfNames[i].UdfId;
ChkBox.Checked = true;
cellUdfValue2.Controls.Add(ChkBox);
}
break;
}
}
if (i % 2 == 0)
{
tr1.Cells.AddAt(0, cellUdf1);
tr1.Cells.AddAt(1, cellUdfValue1);
}
else
{
tr1.Cells.AddAt(2, cellUdf2);
tr1.Cells.AddAt(3, cellUdfValue2);
}
tblUdf.Rows.Add(tr1);
// tblUdf.DataBind();
}
}
}
and the read function as below
private void readValuesFromUdfControls() { colUdfDataMaster.Clear(); int c= tblUdf.Controls.Count; int tablrow= tblUdf.Rows.Count;
//TextBox tb1 = (TextBox)tblUdf.Rows[0].FindControl(dtUdfControlInfo.Rows[0][0].ToString());
//string tb1 = (string)Request.Form["ctl00_ContentPlaceHolder1_" + dtUdfControlInfo.Rows[0][0].ToString()];
for (int j = 0; j < tblUdf.Rows.Count;j++ )
{
for (int k = 0; k < tblUdf.Rows[j].Cells.Count;k++ )
{
Control ctrl = tblUdf.Rows[j].Cells[k].Controls[1];
for (int i = 0; i < colUdfNames.Count; i++)
{
PL_UdfDataMaster objUdfDataMaster = new PL_UdfDataMaster();
if (ctrl.ID.Contains("txtText"))
{
TextBox tb = (TextBox)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = tb.Text;
}
else if (ctrl.ID.Contains("txtNumber"))
{
TextBox tb = (TextBox)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = tb.Text;
}
else if (ctrl.ID.Contains("txtDecimal"))
{
TextBox tb = (TextBox)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = tb.Text;
}
else if (ctrl.ID.Contains("txtMemo"))
{
TextBox tb = (TextBox)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = tb.Text;
}
else if (ctrl.ID.Contains("txtDate"))
{
TextBox tb = (TextBox)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = tb.Text;
}
else if (ctrl.ID.Contains("txtDateTime"))
{
TextBox tb = (TextBox)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = tb.Text;
}
else if (ctrl.ID.Contains("ddlDropDown"))
{
DropDownList ddl = (DropDownList)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = ddl.SelectedItem.Text;
}
else if (ctrl.ID.Contains("ChkBox"))
{
CheckBox chk = (CheckBox)ctrl;
objUdfDataMaster.UdfId = colUdfNames[i].UdfId;
objUdfDataMaster.MasterId = ErpSessions._GeneralLedgerId;
objUdfDataMaster.Enum_FormId = 3;
objUdfDataMaster.UdfData = chk.Checked == true ? "true" : "false";
}
colUdfDataMaster.Add(objUdfDataMaster);
}
}
}
}
the problem is that i m getting the rowcount=0 of the table tblUdf inside which i added the table rows and controls inside the table cells.
Any help how to get the control values of the dynamically added controls.
Thankx. Mohak
You need to make sure that you add the controls again on postback before you read back the values.
To elaborate on Ben's answer, you need to override the CreateChildControls method and create your controls there. The docs for this method provide a handy example of doing what you're doing:
http://msdn.microsoft.com/en-us/library/system.web.ui.control.createchildcontrols.aspx
精彩评论