从Sql动态创建控件但我不能取文本值?

时间:2010-07-01 14:38:11

标签: c# .net sql visual-studio visual-studio-2008

我尝试填充列表框。我从数据库生成了文本框和标签。 (我的平台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);
                    }
                }
            }
        }

    }
}

ListBox正在填充。但noValue出现在列表框中? ScrollBar在列表框中填充数据但没有文本

2 个答案:

答案 0 :(得分:1)

这是Page lifecycle的典型ASP.Net问题。

您正在页面加载期间动态创建控件,然后期望它们的值在页面加载的视图状态中保持不变。这不会发生,因为在回发期间,在Page.Init事件触发后添加到页面的任何动态控件都没有注册为保存和加载视图状态。

更改代码以在Init中创建控件,这应该可行。

有关ASP.Net生命周期的更多说明,请参阅this link

答案 1 :(得分:0)

我没有看到任何代码在创建后设置TextBox的值。尝试在TextBox创建后设置值,它应该可以正常工作。