Есть много примеров по этому поводу, и я вполне уверен, что использую рекурсию для поиска элемента управления. Как только элемент управления найден при обратной передаче, с ним можно взаимодействовать и т. Д.
В моей разметке HTML есть пустая таблица asp:
<asp:Table ID="editDataTable" runat="server">
</asp:Table>
А в Page_Load таблица заполнена множеством строк и столбцов (я очень горжусь, что понял это). Внутри некоторых ячеек таблицы есть <asp:TextBox />
.
Вы уже догадались, мне нужно получить значение этих текстовых полей!
(Я получил код для рекурсии и проверил его, и, кажется, он хорош.)
Моя таблица состоит из двух столбцов. Левый содержит названия, такие как «Название компании, Телефон» и т. Д., А правый столбец содержит текстовые поля с соответствующим значением заголовка. Таким образом, пользователь может редактировать текстовое поле (например, если номер телефона изменился) и отправить изменения.
Очевидно, что строки добавляются динамически в зависимости от пользователя.
Проблема, с которой я столкнулся: вам нужно ДОБАВИТЬ элемент управления на страницу при заполнении таблицы. Что-то вроде:
myTable.Control.Add(new TextBox());
В моем случае моя таблица называется editDataTable. Так что в моем коде, где я добавляю строки, я тоже добавил элемент управления, как показано ниже.
for (int i = 0; i < rowCount; i++)
{
editDataTable.Rows.Add(tblRow[j]); // This is where I add the ROW to my sexy table
editDataTable.Controls.Add(new TextBox()); // This is where I add the control
}
Те, кто проснется, узнают, что вы не можете добавить элемент управления текстовым полем в таблицу!
Итак, наконец, мои вопросы:
- Как добавить элемент управления для текстовых полей в мою таблицу?
- Куда мне их добавить?
- Есть ли какой-нибудь дополнительный совет, который поможет мне выполнить мой квест по извлечению текстовых значений из моих динамически добавляемых текстовых полей?
Вот мой рекурсивный код на всякий случай:
private void getControls(Control parent)
{
foreach (Control c in parent.Controls)
{
if (c is TextBox && c.ID == null)
{
//Stuff
}
if (c.Controls.Count > 0)
{
getControls(c);
}
}
}