我有一个GridView,它显示订单标题详细信息(例如,订单号,客户名称)。 GridView中的每一行都有一个“查看详细信息”按钮,该按钮显示另一个包含订单行详细信息(订单行号,数量,价格)的面板。该订单的所有明细行都显示在PlaceHolder控件中 它为每一行生成一个Label和一个TextBox。相对于订单行的数量显示在文本框内,用户可以更改其值,然后单击“保存”按钮。但是在回发时控件不存在。
我以前能够在PageInit中生成动态控件,但是这仅对我有用,因为控件使用的数据不需要用户先选择。对于我所拥有的场景,动态控件是根据用户选择的顺序生成的。
这是生成动态控件的代码(为简化起见删除了一些代码):
protected void gvOrders_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "EditOrder")
{
// show panel
pnlEditOrder.Visible = true;
// get order id
Int64 OrderHeaderID = Convert.ToInt64(e.CommandArgument.ToString());
// get order line details
Business obj = new Business();
DataTable dt = obj.GETPOLineDetails(OrderHeaderID);
foreach (DataRow dr in dt.Rows)
{
TextBox tbQuantity = new TextBox();
tbQuantity.Text = dr["fldLineQuantity"].ToString();
tbQuantity.ID = "txtDetailLineID" + dr["fldOrderLineID"].ToString();
tbQuantity.Attributes.Add("data-detaillineid", dr["fldOrderLineID"].ToString());
tbQuantity.Enabled = false;
phDetailLines.Controls.Add(new LiteralControl("<p>"));
phDetailLines.Controls.Add(tbQuantity);
phDetailLines.Controls.Add(new LiteralControl("</p>"));
}
}
}
按下“保存”按钮时捕获值的代码:
foreach (Control item in phDetailLines.Controls)
{
// capture the values here
}
当用户在文本框中编辑定量时,他们将单击“保存”按钮,我要遍历文本框并捕获值,但是由于控件不存在,因此从未输入过该遍。我已经检查过两次/三次,并且占位符的ID正确为“ phDetailLines”。如何在PageInit中生成控件,使其在回发期间存在?