Удаление динамических элементов управления: очистить работает, но не удалить
Я столкнулся с недавней проблемой, когда я генерировал динамическое управление при выборе выпадающего меню. Когда выбор изменяется, я должен создать другой набор динамических элементов управления, удаляя существующие элементы управления.
Поэтому я делал следующее, которое не работает:
private void ClearDynamicControls()
{
if (adapter != null)
{
//This has all the controls saved in some dictionary, key as control ID
var controls = adapter.GetAllControls().Keys;
Control mainControl = (PlaceHolder)this.Form.FindControl("MainContent");
foreach (String controlName in controls)
{
Control controlToRemove = this.Form.FindControl("MainContent").FindControl(controlName);
mainControl.Controls.Remove(controlToRemove);
}
var controls2 = mainControl.Controls;
//clearing the controls in the dictionary
adapter.ClearAllControls();
}
}
Но аналогичный код с методом Clear() работает нормально. Так что мне с этим делать?
private void ClearDynamicControls()
{
if (adapter != null)
{
//This has all the controls saved in some dictionary, key as control ID
var controls = adapter.GetAllControls().Keys;
Control mainControl = (PlaceHolder)this.Form.FindControl("MainContent");
mainControl.Controls.Clear();
//clearing the controls in the dictionary
adapter.ClearAllControls();
}
}
С помощью этого кода все элементы управления (как динамические, так и статические) удаляются. Так что же с этим делать?
Пожалуйста, дайте мне знать, если я делаю что-то не так.
Я вызываю этот метод при срабатывании события изменения выбора. Эти элементы управления добавляются в таблицу...
1 ответ
Если вы знаете имена вашего элемента управления, вы можете использовать это:
foreach(Control control in Controls){
if(control.Name == "yourControlName"){
Controls.Remove(control);
}
}
или если вы хотите удалить все элементы управления с панели, например, вы можете использовать:
foreach(Control control in panel.Controls){
panel.Controls.Remove(control);
}
Надеюсь, поможет!