Как я могу просмотреть (только) флажок на панели? - PullRequest
0 голосов
/ 07 марта 2012

У меня есть этот код:

foreach (MyObject object in MyObject)
{
    Literal checkBoxStart = new Literal();
    Literal checkBoxEnd = new Literal();
    checkBoxStart.Text = "<div class=\"item\">";
    checkBoxEnd.Text = "</div>";

    CheckBox chb = new CheckBox();
    chb.InputAttributes.Add("value", object.UniqueID);
    chb.Text = object.Title;
    panelLocalita.Controls.Add(checkBoxStart);
    panelLocalita.Controls.Add(chb);
    panelLocalita.Controls.Add(checkBoxEnd);
}

than, по методу cmdSend_Click(object sender, EventArgs e) я бы хотел просмотреть панель и проверить только Checkbox s. Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Если я понимаю, что вы подразумеваете под просмотром, вы можете сделать что-то вроде:

foreach (CheckBox chb in panelLocalita.Controls.OfType<CheckBox>())
{
}

Вы должны использовать System.Linq для этой работы.

1 голос
/ 07 марта 2012

Вы можете копать в ящик для инструментов Linq.Есть несколько методов, которые работают с IEnumerable, и, поскольку ControlsCollection реализует этот интерфейс, вы можете использовать их непосредственно в коллекции.Один из методов очень хорошо подходит для ваших нужд.Метод расширения OfType<TResult>() выполняет итерацию коллекции и возвращает только те элементы, которые имеют предоставленный тип.

, чтобы получить все флажки, которые вы могли бы сделать следующим образом:

var checkboxes = panelLocalita.Controls.OfType<CheckBox>();

и выЗатем можно выполнить итерацию через foreach, если вы хотите получить побочные эффекты, такие как установка для всех отмеченных

foreach(var checkBox in checkboxes)
{
    checkBox.Checked = true;
}

, или если вам нужно получить от них информацию, вы можете использовать другие инструменты из набора инструментов Linq, например,Вы хотели получить только те, которые отмечены:

checkboxes.Where(c=>c.Checked)

или проверить, что все отмечены

checkboxes.All(c=>c.Checked)
...