【发布时间】:2017-01-29 14:58:25
【问题描述】:
我有一个动态生成的表格,在 2 列内有文本框。在回发期间,即使我填充它们,文本框也总是空的。 该表是这样构建的:
protected void ddlScalaTaglie_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable dtRighe = oTab.getScaleTaglieRighe(ddlScalaTaglie.SelectedValue);
//dt is datatable object which holds DB results.
Table tbl = new Table();
tbl.CssClass = "table table-striped table-bordered table-responsive";
TableRow tr;
TableCell tcEU, tcUS, tcUK, tcQty, tcEAN;
Label lbEU, lbUS, lbUK, lbQty, lbEAN;
TextBox tbEU, tbUS, tbUK, tbQty, tbEAN, tbToFocus = null;
foreach (DataRow dr in dtRighe.Rows)
{
tr = new TableRow();
//ean
tcEAN = new TableCell();
tbEAN = new TextBox();
tbEAN.ID = "txtEAN" + dr[0].ToString();
tbEAN.Width = new Unit(100, UnitType.Percentage);
tbEAN.Columns = 15;
tcEAN.Controls.Add(tbEAN);
tr.Controls.Add(tcEAN);
//Qty
tcQty = new TableCell();
tbQty = new TextBox();
tbQty.ID = "txtQty" + dr[0].ToString();
tbQty.TextMode = TextBoxMode.Number;
tcQty.Controls.Add(tbQty);
tr.Controls.Add(tcQty);
tbl.Controls.Add(tr);
}
Session["tbl"] = tbl;
divTaglieRighe.Controls.Add(tbl);
}
当我点击 SAVE 按钮时,我必须遍历我的表格并保存所有 TextBox.Text...
这是我写的:
ArrayList arrScarpaFigli = new ArrayList();
Table tbl = (Table)Session["tbl"];
foreach (TableRow row in tbl.Rows)
{
foreach (TableCell cell in row.Cells)
{
foreach (Control ctrl in cell.Controls)
{
//CONTROL IS TEXBOXT: EXTRACT VALUES//
if (ctrl is TextBox)
{
TextBox txt = (TextBox)ctrl;
arrScarpaFigli.Add(txt.Text);
}
}
}
}
问题是,如果我填充文本框,在我的文本中总是有一个空字符串。 我填表的唯一时刻是在下拉菜单的 selectionChange 上。
我做错了什么? 提前致谢
【问题讨论】:
-
也许this 的帖子可以解决你的问题。
-
我动态设置ID
-
您必须在 PostBack 上保留动态创建的控件的 ViewState。查看this article 了解更多信息。
-
@M.E.我看一下您发布的解决方案,但这不是我需要的方法。我有一个动态生成的表格,在 2 列内有文本框
-
@Martina 这里的问题是您在使用动态控件时没有使其工作所需的背景知识。就像许多其他人所写的那样,您必须在下一篇文章中重新创建控件才能使其正常工作。幸运的是,有现成的 Asp.Net 控件可供您使用:
GridView、ListView、Repeater等。将它们与数据绑定一起使用,您不必使用动态创建的控件。