ASP.net - Определение конкретного элемента управления в коде позади - PullRequest
0 голосов
/ 06 июля 2011

У меня есть страница, которая содержит 5 текстовых полей, каждое имя одинаковое, но с числовым суффиксом.Пример:

tbNumber1, tbNumber2, tbNumber3 и т. Д.

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

Как я могу пройти по текстовому содержимому этих текстовых ящиков?

Мой первый инстинкт был сделать что-то вроде следующего, ноэто, очевидно, не работает:)

for (int i = 0; i <= 3; i++)
        {
            string foo = tbNumber+i.Text;
            //Do stuff
        }

Какой лучший способ пройти через каждое из этих текстовых полей?

Спасибо !!!

Ответы [ 5 ]

4 голосов
/ 06 июля 2011

Вы можете сделать что-то вроде этого:

for( int i = 0; i < upperLimit; i++ )
{
    TextBox control = Page.FindControl("tbNumber" + i) as TextBox;
    if( control != null ) {
        // do what you need to do here
        string foo = control.Text;
    }
}
0 голосов
/ 06 июля 2011

Вам нужна рекурсивная функция типа FindControl. Попробуйте что-то вроде этого:

for (int i=0; i<3; i++)
{
    Control ctl = FindControlRecursive(Page.Controls, "tbNumber", i.ToString());
    if (ctl != null)
    {
        if (ctl is TextBox)
        {
            TextBoxControl tbc = (TextBox)ctl;
            // Do Something with the control here
        }
    }
}

private static Control FindControlRecursive(Control Root, string PrefixId, string PostFix)
{
    if (Root.ID.StartsWith(PrefixId) && Root.ID.EndsWith(PostFix))
        return Root;

    foreach (Control Ctl in Root.Controls)
    {
        Control FoundCtl = FindControlRecursive(Ctl, PrefixId, PostFix);
        if (FoundCtl != null)
            return FoundCtl;
    }
    return null;
}
0 голосов
/ 06 июля 2011

Если вы генерируете их динамически, поместите их в List<TextBox> при генерации:

// in the Page_Load or whereever you generate the textboxes to begin
var boxes = new List<TextBox>();

for (int i = 0; i < numRecords /* number of boxes */; i++) {
  var newBox = new TextBox();
  // set properties here

  boxes.Add(newBox);
  this.Controls.Add(newBox);
}

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

foreach (var box in boxes) {
  string foo = box.Text;
  // stuff
}
0 голосов
/ 06 июля 2011

Возможно, попробуйте что-то вроде

foreach(Control control in Page.Controls)
{
     //Do stuff
}
0 голосов
/ 06 июля 2011

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

foreach(var checkbox in checkboxlistcontrol)
{
  string name = checkbox.Text;
}

Если вы не используете CheckboxList control, вы можете рассмотреть возможность его использования в качестве опции.

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