#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 и т. Д.), Чтобы я мог Это сделать.
Еще раз спасибо за прекрасный (и быстрый!) вклад, я теперь влюблен в этот сайт!