Динамические события добавляются в динамические текстовые поля, не вызывая - PullRequest
0 голосов
/ 19 марта 2012

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

    List<string> txtNames = new List<string>();
    txtNames.Add("txtId");
    txtNames.Add("txtName");
    txtNames.Add("txtQty");
    txtNames.Add("txtUnitPrice");
    txtNames.Add("txtExtendedPrice");

    Panel1.Controls.Add(new LiteralControl("\t<tr>\n"));
    TextBox txt;
    foreach (string s in txtNames)
    {
        txt = new TextBox();
        txt.CopyBaseAttributes(Textbox1);
        txt.Text = "";
        txt.BorderWidth = 0;
        txt.ID = s + row;

        Panel1.Controls.Add(new LiteralControl("\t\t<td>"));
        Panel1.Controls.Add(txt);
        Panel1.Controls.Add(new LiteralControl("</td>\n"));

        txt.AutoPostBack = true;
        txt.TextChanged += new EventHandler(txt_TextChanged);

        txt.Text = s;
        count++;
    }
    Panel1.Controls.Add(new LiteralControl("\t</tr>\n"));
    row++;

(панель находится внутри html-таблицы)

Этот код находится в функции, которая вызывается, когда страница не отправляется назад или когда нажимается кнопка для добавления строки текстовых полей.

Текстовые поля сохраняются в сеансе, а затем перезагружаются при загрузке страницы.

Я попытался создать тестовое текстовое поле, которое не было создано в цикле for и которое вызывает событие изменения текста.

Редактировать : я пытался повторно добавитьсобытие изменения текста при загрузке текстовых полей из сохраненного сеанса, и теперь они вызывают функцию.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

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

   protected override void OnInit( EventArgs e)
    {
        base.OnInit(e);
        int row = 0;
        int count = 0;
        List<string> txtNames = new List<string>();
        txtNames.Add("txtId");
        txtNames.Add("txtName");
        txtNames.Add("txtQty");
        txtNames.Add("txtUnitPrice");
        txtNames.Add("txtExtendedPrice");

        Panel1.Controls.Add(new LiteralControl("\t<tr>\n"));
        TextBox txt;
        foreach (string s in txtNames)
        {
            txt = new TextBox();
            //txt.CopyBaseAttributes(Textbox1);
            txt.BorderWidth = 0;
            txt.ID = s + row;

            Panel1.Controls.Add(new LiteralControl("\t\t<td>"));
            Panel1.Controls.Add(txt);
            Panel1.Controls.Add(new LiteralControl("</td>\n"));

            txt.AutoPostBack = true;
            txt.TextChanged += (sndr, evt) => { Response.Write(((Control)sndr).ID + " --- " + ((TextBox)sndr).Text); };

            if(!IsPostBack)
                txt.Text = s;
            count++;
        }
        Panel1.Controls.Add(new LiteralControl("\t</tr>\n"));
        row++;

    }
0 голосов
/ 19 марта 2012

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

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