Цикл управления в ASP.Net C # - PullRequest
       3

Цикл управления в ASP.Net C #

1 голос
/ 30 августа 2010

У меня есть страница, которая содержит таблицу с парой строк, и в этой строке есть флажки.

Теперь я хочу зациклить все флажки, чтобы увидеть, установлены они или нет.

Это мой текущий подход:

foreach (Control c in Page.Controls)
{
    if(c is Checkbox){
    }
}

Теперь проблема в том, что я получаю только 2 элемента управления - страницу и таблицу. Таким образом, флажки находятся в: Таблица -> TableRow -> TableCell -> CheckBox

Есть ли способ получить ВСЕ элементы управления на странице, вместо того, чтобы вкладывать в нее элементы, чтобы получить элементы управления?

Ответы [ 4 ]

1 голос
/ 30 августа 2010

control.Controls вернет только дочерние элементы управления первого уровня.Подробности см. на этот вопрос .

0 голосов
/ 30 августа 2010

Я только что сделал вложенный цикл foreach следующим образом:

List<Control> allControls = new List<Control>();
            List<string> selectedIDs = new List<string>();

        foreach (Control c in this.pnlTable.Controls)
        {
            allControls.Add(c);

            if (c.Controls.Count > 0)
            {
                foreach (Control childControl in c.Controls)
                {
                    allControls.Add(childControl);

                    if (childControl.Controls.Count > 0)
                    {
                        foreach (Control childControl2 in childControl.Controls)
                        {
                            allControls.Add(childControl2);

                            if (childControl2.Controls.Count > 0)
                            {
                                foreach (Control childControl3 in childControl2.Controls)
                                {
                                    allControls.Add(childControl3);
                                }
                            }
                        }
                    }
                }
            }
        }

        foreach (Control control in allControls)
        {
            if (control is CheckBox)
            {
                if (((CheckBox)(control)).Checked)
                {
                    selectedIDs.Add(((CheckBox)(control)).ID);
                }
            }
        }

В зависимости от глубины элемента управления, который я добавил, if и foreach ..

Надеюсь, это поможет кому-то еще стот же вопрос ...

0 голосов
/ 30 августа 2010

Элемент управления может выступать в качестве родительского элемента для коллекции элементов управления, как в вашем случае. Вам следует выполнить итерацию по дочернему элементу родительского элемента управления, который вы используете на своей странице. см http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controls%28VS.71%29.aspx

0 голосов
/ 30 августа 2010

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

Пример того, как это сделать, вы можете найти здесь: http://www.atrevido.net/blog/CommentView,guid,c792adbf-ce0a-4bf9-a61c-ca1a4296d0ea.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...