日期:2014-05-18  浏览次数:20453 次

动态添加删除自定义控件的问题!!!各位高手帮忙!
大家动态添加的自定义控件 需要有视图状态,不然获取不到控件的值! 先看我的代码

protected void Page_Load(object sender, EventArgs e)
  {
  for (int i = 0; i < 5; i++)
  {
  string kjid = "MyControl" + i.ToString();
  Control a = Page.LoadControl("WebUserControl.ascx");
  a.ID = kjid;
  if (ViewState[kjid] != null)
  {
  PlaceHolder1.Controls.Add(a);
  }
  }
  }

下面是动态添加:
  protected void Button1_Click(object sender, EventArgs e)
  {
  for (int i = 0; i < 5; i++)
  {
  string kjid = "MyControl" + i.ToString();
  Control a = Page.LoadControl("WebUserControl.ascx");
  a.ID = kjid;
  if (ViewState[kjid] == null)
  {
  PlaceHolder1.Controls.Add(a);
  ViewState[kjid] = true;
  break;
  }
  }
  }

下面是动态添加的控件全部删除
  protected void Button2_Click(object sender, EventArgs e)
  {
  PlaceHolder1.Controls.Clear();
  for (int i = 0; i < 5; i++)
  {
  string kjid = "MyControl" + i.ToString();
  if (ViewState[kjid] != null)
  {
  ViewState[kjid] = null;
  }
  }
  }

以上代码全部通过 没有错误.功能实现正常!
我的问题是 动态添加的控件 如何单个删除 ?
我在控件中写了:
 protected void Button2_Click(object sender, EventArgs e)
  {
  Page.FindControl("PlaceHolder1").Controls.Remove(this);
  ViewState[this.ID] = null;
  }
控件是可以删除 但是删不了 ViewState中的状态!!

如何才能实现单个删除. !! 其实只要清除掉 控件自身的ViewState就可以了。 不知道怎么些这个!!! 在控件中写
 ViewState[this.ID] = null;
是不能删除的!!希望高手指点!!!在线等





------解决方案--------------------
if(!Page.IsPostBack)
{
for (int i = 0; i < 5; i++) 

string kjid = "MyControl" + i.ToString(); 
Control a = Page.LoadControl("WebUserControl.ascx"); 
a.ID = kjid; 
if (ViewState[kjid] != null) 

PlaceHolder1.Controls.Add(a); 


}

------解决方案--------------------
viewstate是在控件的属性块里写的.
------解决方案--------------------
先加上ispostback试试,然后还有就是viewstate应该在控件的属性块里面写吧?????



------解决方案--------------------
删除按钮
C# code

if(panel1.Controls.Contains(button2))   
  {   
          panel1.Controls.Remove(button2);   
  }