往Panel里添加一个Label

wayne23 2007-06-11 10:58:30
有一个Panel,ID为Panel1
有一个Button,ID为Button1
我每点击Button一次,就往Panel里添加一个Label

为什么只能添加一个??最新添加的总是覆盖了前一个,是怎么回事?

protected void Button1_Click(object sender, EventArgs e)
{
string time = DateTime.Now.Second.ToString();

Label lbl = new Label();
lbl.Text = time;
lbl.ID = time;

this.Panel1.Controls.Add(lbl);
}
...全文
634 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mqc507 2007-06-11
  • 打赏
  • 举报
回复
前台:

-------------
| Button1 |
|-----------|

---------------------------------------------------------------
| |-------| |
| | Label1| Panel1 |
| |-------| |
|--------------------------------------------------------------
mqc507 2007-06-11
  • 打赏
  • 举报
回复
把Panel1的属性设置加一条 EnabledViewState="true", Panel1中原来有一个 Label

完整后台代码(已测试):

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Label1.Text = idtime();
Label1.ID = idtime();
Panel_Load();
}
}
private void Panel_Load()
{
ArrayList AL = new ArrayList();
foreach (Control LB in Panel1.Controls)
{
if (LB.GetType().ToString() == "System.Web.UI.WebControls.Label")
{
Label labl = (Label)LB;
AL.Add(labl);
}
}
Session.Add("label",AL);
}
private void GetInfo() //获取当前AL中Label集的信息
{
ArrayList AL = new ArrayList();
AL = (ArrayList)Session["label"];
if (Session["label"] != null)
{
for (int i = 0; i < AL.Count; i++)
{
Panel1.Controls.Add((Label)AL[i]);
}
}
}

private void AddLabel() //动态添加Label的处理
{
ArrayList Al = new ArrayList();
this.Panel1.Controls.Clear();
GetInfo();
Label LB = new Label();
LB.Text = idtime();
LB.ID = idtime();
Panel1.Controls.Add(LB);
Panel_Load();
}

public string idtime()
{
string tim;
tim = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.TimeOfDay.Hours.ToString() + DateTime.Now.TimeOfDay.Minutes.ToString() + DateTime.Now.TimeOfDay.Seconds.ToString() + DateTime.Now.TimeOfDay.Milliseconds.ToString();
return tim;
}

protected void Button1_Click(object sender, EventArgs e)
{
AddLabel();
}
MaWenkun 2007-06-11
  • 打赏
  • 举报
回复
哦,谢谢你。页面的生命周期就是这样的吧。知道了。谢谢
amandag 2007-06-11
  • 打赏
  • 举报
回复
每次都要重新添加...

除非你哪个填加的按纽不是服务器的按纽,你用JS添加这些控件,然后用另一个服务器按钮一次提交到服务器
MaWenkun 2007-06-11
  • 打赏
  • 举报
回复
只有这样做吗?每次都重新添加,有没有办法动态添加以后能够保存的呢 ?
amandag 2007-06-11
  • 打赏
  • 举报
回复
请参考

private void Page_Load(object sender, System.EventArgs e)
{
if(ViewState["count"] != null)
{
int count = Convert.ToInt32(ViewState["count"]);
for(int i = 0; i < count; i++)
{
Label lbl = new Label();
lbl.Text = "aa";
lbl.ID = "Label" + i;
this.PlaceHolder1.Controls.Add(lbl);
}
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
AddControls();
}

public void AddControls()
{
Label lbl = new Label();
lbl.Text = "aa";
lbl.ID = "Label" + Convert.ToInt32(ViewState["count"]);
ViewState["count"] = Convert.ToInt32(ViewState["count"]) + 1;
this.PlaceHolder1.Controls.Add(lbl);
}

如果你要打算标签上显示当前时间,还要用变量存放
amandag 2007-06-11
  • 打赏
  • 举报
回复
不是新添加的覆盖了,而是每次你点击按钮后页面都重新执行了一次,原有填加的没有保存下来,如果你想保存的话,可能需要ViewState等其他方式保存这些信息
NekChan 2007-06-11
  • 打赏
  • 举报
回复
对于动态增加的控件,你可以使用 ViewState 保存他们的状态,然后在每次 Page_Load 的时候重新加载,否则就会出现楼主的情况。
wayne23 2007-06-11
  • 打赏
  • 举报
回复
我加分了,谁给我个解决的办法啊,有答案就结贴
mqc507 2007-06-11
  • 打赏
  • 举报
回复
20 太少了, 呵呵, 不写代码了, 麻烦。。。。
mqc507 2007-06-11
  • 打赏
  • 举报
回复
页面载入的时候,要存在一个label并且把 Label的信息缓存起来,当你点击Button增加的时候,首先从缓存中获得Label的信息,然后再添加,添加后再缓存起来,再载入一下才能实现
MaWenkun 2007-06-11
  • 打赏
  • 举报
回复
本来就会这样。刷新一次后加的控件都没有了。跟web控件生命周期有关,我不是很懂。学习
mqc507 2007-06-11
  • 打赏
  • 举报
回复
这里开始的时候有没有 Label都可以,如果要Panel中开始的时候没有Label,就把 Page_Load()中的Label1.Text="" 和 Label1.ID=""去掉就好了


不知道楼主需要的是不是这种~! 还是如楼上
apoclast() ( ) 信誉:100 Blog 加为好友 2007-06-11 13:12:06 得分: 0
所说的永久存在。。
apoclast 2007-06-11
  • 打赏
  • 举报
回复
只有Render事件中添加的控件才能持续存在,否则回发以后都回消失,要永久添加控件,请重写Render和RenderControl

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧