Create control dynamically from Sql but I can not take text value?
I try to fill listbox. I generated textbox and labels from database. (My platform asp.net) I dynamically filled the create开发者_StackOverflow社区d textbox. I want to send all data from textboxes to listbox. But disappear all datas.
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 is filling. But noValue appear in listbox? ScrollBar loding data but no text in listbox
This is the classic ASP.Net problem of Page lifecycle.
You are creating controls dynamically during page load, then expecting their values to persist in viewstate across page loads. This won't happen, as during postback, any dynamic controls added to the page after the Page.Init event has fired are not registered as saving and loading viewstate.
Change your code to create your controls in Init instead and this should work.
See this link for more explanation of ASP.Net lifecycle.
I don't see any code that sets value of the TextBox
after it is created. Try setting the value after the TextBox
is created and it should work.
精彩评论