Создание элементов управления в цикле

#c# #asp.net #.net-2.0

Вопрос:

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

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

         TableCell tCell1 = new TableCell();
        TableCell tCell2 = new TableCell();
        TableCell tCell3 = new TableCell();
        TableCell tCell4 = new TableCell();
        TableCell tCell5 = new TableCell();
        TableCell tCell6 = new TableCell();
        TableCell tCell7 = new TableCell();

        TextBox txt1 = new TextBox();
        TextBox txt2 = new TextBox();
        TextBox txt3 = new TextBox();
        TextBox txt4 = new TextBox();
        TextBox txt5 = new TextBox();
        TextBox txt6 = new TextBox();
        TextBox txt7 = new TextBox();

        tCell1.Controls.Add(txt1);
        tCell2.Controls.Add(txt2);
        tCell3.Controls.Add(txt3);
        tCell4.Controls.Add(txt4);
        tCell5.Controls.Add(txt5);
        tCell6.Controls.Add(txt6);
        tCell7.Controls.Add(txt7);

        tRow.Cells.Add(tCell1);
        tRow.Cells.Add(tCell2);
        tRow.Cells.Add(tCell3);
        tRow.Cells.Add(tCell4);
        tRow.Cells.Add(tCell5);
        tRow.Cells.Add(tCell6);
        tRow.Cells.Add(tCell7);
 

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

Что-то вроде следующего-это то, что мне нужно:

     for (int i = 0; i < 6; i  )
    {

        TableCell tCell[i] = new TableCell();
        TextBox txt[i] = new TextBox();
        tCell[i].Controls.Add(txt[i]);
        tRow.Cells.Add(tCell[i]);

    } 
 

Любая помощь была бы очень признательна.

Комментарии:

1. Не забудьте изменить i<6 на i<7 или i

2. что не так с вашим предложением для цикла? это решение, которое я бы предложил. Неужели это работает неправильно?

Ответ №1:

Я думаю, что это должно сделать это:

     for (int i = 0; i < 7; i  )
    {

        TableCell tCell = new TableCell();
        TextBox txt = new TextBox();
        tCell.Controls.Add(txt);
        tRow.Cells.Add(tCell);

    }
 

Убедитесь, что 6 заменено на 7.

Ответ №2:

Это должно сработать нормально?

 for (int i = 0; i < 6; i  )
{
    TableCell tCell = new TableCell();
    TextBox txt = new TextBox();
    tCell.Controls.Add(txt);
    tRow.Cells.Add(tCell);
}
 

Хотя я не совсем понимаю, для чего вам нужны имена.
Планируете ли вы использовать имя «txt5» в качестве ссылки на это конкретное текстовое поле?
Почему бы просто не использовать tRow.Cells[4].Controls[0] As TextBox ?

Ответ №3:

То, что вы написали, на самом деле выглядит довольно близко ко мне. Однако следует иметь в виду несколько моментов.

Я не верю, что вам нужен индекс массива. Пока TRow инициализируется вне цикла, он будет каждый раз добавлять новые элементы. Вы также можете установить свойство ID для каждого текстового поля, чтобы получить доступ к любой конкретной информации, которую вы, возможно, ищете в будущем.

Ответ №4:

Спасибо за все полезные ответы. Для тех, кто задавал вопросы о том, что я делал с массивами, я не был! Это был всего лишь пример того, чего я пытался достичь.

Ян и Ларс правильно поняли, что мне нужно будет обратиться к этим текстовым полям позже, Поэтому мне просто нужно использовать решение Юджина и Любоса и убедиться, что я добавляю строку, которая даст им последовательные идентификаторы (txt1, txt2 и т. Д.), Чтобы я мог Это сделать.

Еще раз спасибо за прекрасный (и быстрый!) вклад, я теперь влюблен в этот сайт!