删除动态创建的控件

时间:2010-02-25 18:34:03

标签: c# asp.net

我试图在C#2008 asp.net中删除动态创建的控件

在此处创建控件:

        int i;
        for (i = 0; i < myCount; i += 1)
        {
            TextBox txtAuto = new TextBox();
            TextBox txtModel = new TextBox();
            TextBox txtMiles = new TextBox();
            TextBox txtVINumber = new TextBox();
            TextBox txtPlateNumber = new TextBox();

            txtAuto.ID = "txtVehAuto" + i.ToString();
            txtModel.ID = "txtVehModel" + i.ToString();
            txtMiles.ID = "txtVehMilage" + i.ToString();
            txtVINumber.ID = "txtVehVINumber" + i.ToString();
            txtPlateNumber.ID = "txtVehPlate" + i.ToString();

            phAuto.Controls.Add(txtAuto);
            phModel.Controls.Add(txtModel);
            phMiles.Controls.Add(txtMiles);
            phVINumber.Controls.Add(txtVINumber);
            phPlateNumber.Controls.Add(txtPlateNumber);

            dyntxtAuto[i] = txtAuto;
            dyntxtModel[i] = txtModel;
            dyntxtMiles[i] = txtMiles;
            dyntxtVINumber[i] = txtVINumber;
            dyntxtPlateNumber[i] = txtPlateNumber;

            LiteralControl literalBreak = new LiteralControl("<br />");

            phAuto.Controls.Add(literalBreak);
            phModel.Controls.Add(literalBreak);
            phMiles.Controls.Add(literalBreak);
            phVINumber.Controls.Add(literalBreak);
            phPlateNumber.Controls.Add(literalBreak);
        }
    }

如何删除控件? 用户将单击“提交”,此时用户输入的数据将被写入数据库。页面将返回自身(带有空白字段)。我想在将数据写入数据库后删除动态控件。删除意义删除,而不是隐藏。我试图将ViewState设置为false,但它没有帮助。

3 个答案:

答案 0 :(得分:7)

你能这样做吗?

phAuto.Controls.Clear();
phModel.Controls.Clear();
phMiles.Controls.Clear();
phVINumber.Controls.Clear();
phPlateNumber.Controls.Clear();

这些控件中是否有其他控件我不知道你不想清除它?

答案 1 :(得分:1)

这取决于你想要做什么......

如果您只想删除占位符“phAuto”,“phModel”等中的所有控件,则可以使用* .Controls.Clear();方法。

但是,如果您要删除单个控件...您可以使用* .FindControl(字符串ID)方法。它将返回一个通用的Control对象,其中包含您传递给它的id。然后,您可以将该对象传递给* .Controls.Remove(...)方法。

如果您想使用Page.FindControl(),Page.Controls.Remove()等,并且您正在使用母版页...它会变得有点棘手。阅读this article以了解递归控制搜索。

我自己还是.NET的新手,我每天都在寻找新的(更容易的)做事方式。如果有更好的方法,我不会感到惊讶。

祝你好运!

答案 2 :(得分:1)

private List<Control> ControlList = new List<Control>;

private void CreateControls();
{
    int i;
    for (i = 0; i < myCount; i += 1)
    {
        TextBox txtAuto = new TextBox();
        TextBox txtModel = new TextBox();
        TextBox txtMiles = new TextBox();
        TextBox txtVINumber = new TextBox();
        TextBox txtPlateNumber = new TextBox();

        txtAuto.ID = "txtVehAuto" + i.ToString();
        txtModel.ID = "txtVehModel" + i.ToString();
        txtMiles.ID = "txtVehMilage" + i.ToString();
        txtVINumber.ID = "txtVehVINumber" + i.ToString();
        txtPlateNumber.ID = "txtVehPlate" + i.ToString();

        ControlList.Add(txtAuto);
        ControlList.Add(txtModel);
        ControlList.Add(txtMiles);
        ControlList.Add(txtVINumber);
        ControlList.Add(txtPlateNumber);

        phAuto.Controls.Add(txtAuto);
        phModel.Controls.Add(txtModel);
        phMiles.Controls.Add(txtMiles);
        phVINumber.Controls.Add(txtVINumber);
        phPlateNumber.Controls.Add(txtPlateNumber);

        dyntxtAuto[i] = txtAuto;
        dyntxtModel[i] = txtModel;
        dyntxtMiles[i] = txtMiles;
        dyntxtVINumber[i] = txtVINumber;
        dyntxtPlateNumber[i] = txtPlateNumber;

        LiteralControl literalBreak = new LiteralControl("<br />");

        phAuto.Controls.Add(literalBreak);
        phModel.Controls.Add(literalBreak);
        phMiles.Controls.Add(literalBreak);
        phVINumber.Controls.Add(literalBreak);
        phPlateNumber.Controls.Add(literalBreak);
    }
}

private void RemoveControls(List<Control> ControlList)
{
    foreach (Control item in ControlList)
    {
        item.Remove();
    }
}

我有一段时间没有使用ASP.NET,这是未经测试的,但我认为这(或其变体)可行。我不记得List<Control>是否有效......可能必须List<TextBox>