简化后的代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
//代码放在这儿不能马上刷新,需要有按钮按下时才会显示,容易混乱。
if(ViewState["Flag"]==null)
ViewState["Flag"]=0;
if(ViewState["Count"]==null)
ViewState["Count"]=0; int count =int.Parse (ViewState["Flag"].ToString ());
for(int i=0;i<=count;i++)
{
TextBox t=new TextBox ();
t.ID ="Name"+i.ToString ();
Panel1.Controls .Add (t);
Literal l=new Literal ();
l.Text ="<br>";
Panel1.Controls.Add(l);
}
int num=int.Parse (ViewState["Count"].ToString ()); for(int i=0;i<=num;i++)
{
TextBox t=new TextBox ();
t.ID ="Ni"+i.ToString ();
Panel2.Controls .Add (t);
Literal l=new Literal ();
l.Text ="<br>";
Panel2.Controls.Add(l);
}
}
override protected void OnPreRender(EventArgs e )
{
base.OnPreRender (e);
//代码放在这儿则前面的输入的数据会被清空
}
private void Button1_Click(object sender, System.EventArgs e)
{
ViewState["Flag"] = int.Parse (ViewState["Flag"].ToString() )+1;
} private void Button2_Click(object sender, System.EventArgs e)
{
ViewState["Count"] = int.Parse (ViewState["Count"].ToString() )+1;
}
private void Page_Load(object sender, System.EventArgs e)
{
//代码放在这儿不能马上刷新,需要有按钮按下时才会显示,容易混乱。
if(ViewState["Flag"]==null)
ViewState["Flag"]=0;
if(ViewState["Count"]==null)
ViewState["Count"]=0; int count =int.Parse (ViewState["Flag"].ToString ());
for(int i=0;i<=count;i++)
{
TextBox t=new TextBox ();
t.ID ="Name"+i.ToString ();
Panel1.Controls .Add (t);
Literal l=new Literal ();
l.Text ="<br>";
Panel1.Controls.Add(l);
}
int num=int.Parse (ViewState["Count"].ToString ()); for(int i=0;i<=num;i++)
{
TextBox t=new TextBox ();
t.ID ="Ni"+i.ToString ();
Panel2.Controls .Add (t);
Literal l=new Literal ();
l.Text ="<br>";
Panel2.Controls.Add(l);
}
}
override protected void OnPreRender(EventArgs e )
{
base.OnPreRender (e);
//代码放在这儿则前面的输入的数据会被清空
}
private void Button1_Click(object sender, System.EventArgs e)
{
ViewState["Flag"] = int.Parse (ViewState["Flag"].ToString() )+1;
} private void Button2_Click(object sender, System.EventArgs e)
{
ViewState["Count"] = int.Parse (ViewState["Count"].ToString() )+1;
}
假如是一个datatable
if not ispostback then
......
viewstate("database")=datatalbe
else
datatable=viewstate("database")
end if
在点击添加按扭后,程序执行后不要忘了加上viewstate("database")=datatalbe
应该作什么修改才能立即显示并保持前面输入的数据呢
把添加标志放在Session里
不过button事件里要加些代码
private void Button1_Click(object sender, System.EventArgs e)
{ ViewState["Flag"] = int.Parse (ViewState["Flag"].ToString() )+1;
int i =int.Parse (ViewState["Flag"].ToString ());
TextBox t=new TextBox ();
t.ID ="Name"+i.ToString ();
Panel1.Controls .Add (t);
Literal l=new Literal ();
l.Text ="<br/>";
Panel1.Controls.Add(l);
}
这是标准的思路
测试成功,非常感谢 yxrj()同时也感谢其它各位。