Создать контроль динамически из SQL, но я не могу принять текстовое значение? - PullRequest
0 голосов
/ 01 июля 2010

Я пытаюсь заполнить список. Я создал текстовое поле и метки из базы данных. (Моя платформа asp.net) Я динамически заполнил созданное текстовое поле. Я хочу отправить все данные из текстовых полей в список. Но исчезают все данные.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        public Type typ ;
        public PropertyInfo[] properties;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SetTextBoxAndLabels();
            }
        }

        void SetTextBoxAndLabels()
        {
            TextBox txtBox;
            Label lbl;

            ENG_ACCESS eng = new ENG_ACCESS();
             typ = eng.GetType();
            properties = typ.GetProperties();
            PlaceHolder1.Controls.Add(new LiteralControl("<table>"));
            for (int i = 0; i < properties.Length; i++)
            {
                lbl = new Label();
                lbl.ID = "lbl" + properties[i].Name;
                lbl.Text = properties[i].Name;
                PlaceHolder1.Controls.Add(new LiteralControl("<tr><td>"));
                PlaceHolder1.Controls.Add(lbl);
                PlaceHolder1.Controls.Add(new LiteralControl("</td><td>"));
                txtBox = new TextBox();
                txtBox.ID = "txt" + properties[i].Name;
                PlaceHolder1.Controls.Add(txtBox);
                PlaceHolder1.Controls.Add(new LiteralControl("</td></tr>"));
            }
            PlaceHolder1.Controls.Add(new LiteralControl("</table>"));

        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            SetTextBoxAndLabels();
            if (PlaceHolder1.Controls.Count > 0)
            {
                foreach (Control item in PlaceHolder1.Controls)
                {
                    if (item is TextBox)
                    {
                       TextBox t1 = (TextBox)PlaceHolder1.FindControl(item.ID);
                       ListBox1.Items.Add(t1.Text);
                    }
                }
            }
        }

    }
}

Список заполнен. Но noValue появляются в списке? Данные кодирования ScrollBar, но без текста в списке

Ответы [ 2 ]

1 голос
/ 01 июля 2010

Это классическая проблема ASP.Net жизненного цикла страницы.

Вы создаете элементы управления динамически во время загрузки страницы, а затем ожидаете, что их значения сохранятся в состоянии просмотра при загрузке страницы. Этого не произойдет, так как во время обратной передачи любые динамические элементы управления, добавленные на страницу после возникновения события Page.Init, не регистрируются как сохраняющие и загружающие состояние просмотра.

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

См. эту ссылку для более подробного объяснения жизненного цикла ASP.Net.

0 голосов
/ 01 июля 2010

Я не вижу ни одного кода, который устанавливает значение TextBox после его создания.Попробуйте установить значение после создания TextBox, и оно должно работать.

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