如何使用PageInit从GridView记住占位符内部的动态创建的控件

时间:2019-06-11 10:29:43

标签: c# asp.net

我有一个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中生成控件,使其在回发期间存在?

0 个答案:

没有答案