Удаление динамических элементов управления: очистить работает, но не удалить

Я столкнулся с недавней проблемой, когда я генерировал динамическое управление при выборе выпадающего меню. Когда выбор изменяется, я должен создать другой набор динамических элементов управления, удаляя существующие элементы управления.

Поэтому я делал следующее, которое не работает:


    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);
    }

Надеюсь, поможет!

Другие вопросы по тегам