Aftab Iqbal Clips Ответов: 2

Как контроль доступа в HTMLTABLE, используя ASP.NET с#


Привет Всем,
попытка получить доступ к элементам управления из HtmlTable, но получение этой ошибки
Specified argument was out of the range of valid values.

как правильно получить любой элемент управления из html таблицы с идентификатором
буду глубоко признателен за вашу помощь.
Желаю вам хорошего отдыха

Что я уже пробовал:

HtmlTable tbl = new HtmlTable();
            HtmlTableRow tr= new HtmlTableRow();
            HtmlTableCell td1 = new HtmlTableCell();
            HtmlTableCell td2 = new HtmlTableCell();
            TextBox t1 = new TextBox();
            t1.ID = "t1_id";
            TextBox t2 = new TextBox();
            t2.ID = "t2_d";
            t1.Text = "hello";
            t2.Text = "friend";
            tbl.Border = 2;
            td1.Controls.Add(t1);
            td1.Controls.Add(t2);
            tr.Controls.Add(td1);
            tr.Controls.Add(td2);
            tbl.Controls.Add(tr);
            form1.Controls.Add(tbl);
            for (int i = 0; i <= tbl.Rows.Count - 1; i++)
            {
                for (int j = 0; j <= tbl.Rows[i].Cells.Count - 1; j++)
                {
                    TextBox tbox = (TextBox)tbl.Rows[i].Cells[j].Controls[j];   //causing error
                    Response.Write(tbox.ID);
                                    }
            }

BillWoodruff

разве это не тот же самый вопрос, который вы недавно задавали здесь: https://www.codeproject.com/Questions/5282729/How-do-I-add-dynamic-controls-to-htmltable-using-A

Aftab Iqbal Clips

речь шла о добавлении элементов управления в HtmlTable, но теперь я хочу получить к ним доступ из HtmlTable

F-ES Sitecore

Решение примерно такое же, как я дал на ваш другой вопрос.

Aftab Iqbal Clips

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

2 Ответов

Рейтинг:
7

F-ES Sitecore

Вы говорите, что в каждой ячейке есть только одно текстовое поле, но в вашем коде вы добавляете оба поля в одну и ту же ячейку

td1.Controls.Add(t1);
td1.Controls.Add(t2);


Может быть, вы хотели написать это вместо этого

td1.Controls.Add(t1);
td2.Controls.Add(t2);


Если это так то для ссылки на единственный элемент управления в коллекции просто используйте индекс 0;

TextBox tbox = (TextBox)tbl.Rows[i].Cells[j].Controls[0];


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

for (int i = 0; i <= tbl.Rows.Count - 1; i++)
{
    for (int j = 0; j <= tbl.Rows[i].Cells.Count - 1; j++)
    {
        var textBoxes = tbl.Rows[i].Cells[j].Controls.OfType<TextBox>();
        foreach(TextBox tbox in textBoxes)
        {
            Response.Write(tbox.ID);
        }
    }
}


Aftab Iqbal Clips

точно в цель попал мой учитель.
спасибо вам и всем другим замечательным экспертам на этом форуме.

Рейтинг:
2

Richard MacCutchan

for (int j = 0; j <= tbl.Rows[i].Cells.Count - 1; j++)
{
    TextBox tbox = (TextBox)tbl.Rows[i].Cells[j].Controls[j];   //causing error

Индекс j не действует на Controls.


Aftab Iqbal Clips

да, но как я могу это исправить

Richard MacCutchan

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

Aftab Iqbal Clips

он имеет 1 ячейку текстового поля в каждой строке
я думаю, что с тех пор, как последние 4 часа я пробовал это
Текстовое поле системы tbox = (текстовое поле)ТБЛ.Строки[я].Ячейки[j].элементы управления[0];
а это
Текстовое поле системы tbox = (текстовое поле)ТБЛ.Строки[я].Ячейки[j].элементы управления;
но так и не смог этого понять

Richard MacCutchan

Если он содержит одно текстовое поле, то это не массив, поэтому использование значения индекса для его адресации не имеет смысла. Перечитайте документацию C# по скалярным и массивным переменным.

Aftab Iqbal Clips

Да, братан, это не имеет никакого смысла, но когда я использую только элементы управления, не давая никакого индекса, это дает мне синтаксическую ошибку.