Вы можете рекурсивно пройти по иерархии элементов управления на странице и просто получить элементы управления, которые являются флажками
На вашей странице вы можете объявить участника, который будет использоваться для хранения флажков:
private List<CheckBox> checkBoxes = new List<CheckBox>();
Используя рекурсивный метод, вы можете просмотреть структуру элементов управления:
public void TraverseHierarchy(ControlCollection controls)
{
foreach (Control c in controls)
{
CheckBox checkBox = c as CheckBox;
if (checkBox != null)
{
checkBoxes.Add(checkBox);
}
if (c.Controls.Count > 0)
{
TraverseHierarchy(c.Controls);
}
}
}
И вы можете вызвать это, предоставив коллекцию элементов управления Страницы:
TraverseHierarchy(Page.Controls);
Однако проблема с приведенным выше кодом заключается в том, что существуют определенные элементы управления, которые наследуются от элемента управления CheckBox. Как например RadioButton
. Таким образом, этот элемент управления также будет соответствовать присутствующим в вашей коллекции, потому что as
является действительным.
Что вы можете сделать - это выполнить дополнительную фильтрацию на основе определенного свойства ваших флажков. Например, если ваши ID
имена одинаковы для всех ваших флажков, вы также можете проверить, что свойство ID начинается с определенного префикса:
public void TraverseHierarchy(ControlCollection controls)
{
foreach (Control c in controls)
{
CheckBox checkBox = c as CheckBox;
if (checkBox != null)
{
if (checkBox.ID.StartsWith("cb"))
{
checkBoxes.Add(checkBox);
}
}
if (c.Controls.Count > 0)
{
TraverseHierarchy(c.Controls);
}
}
}
Или вы можете исключить элементы управления, расширяющие CheckBox, с помощью оператора is
, но это станет дополнительным ударом по производительности и довольно уродливым решением.