我试图在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,但它没有帮助。
答案 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>
。