2008-10-08 4 views
1

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

Путь я закодировал до сих пор работает отлично:

 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]); 

    } 

Любая помощь будет оценена.

+0

Обязательно измените i <6 на i <7 или i <= 6 – 2008-10-08 12:51:08

ответ

2

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

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.

0

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

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?

0

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

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

0

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

Ian и Lars получили правильную идею в том, что мне нужно будет обратиться к этим текстовым полям позже, поэтому мне просто нужно использовать решение Eugene и Lubos и убедиться, что я добавляю строку, которая даст им последовательные идентификаторы (txt1, txt2 и т. д.), чтобы я мог это сделать.

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

Смежные вопросы