大家好!
我自己定义了一个WebControl,里面放了两个ImageButton,点击不同的Button显示不同的控件内容(动态生成几个基本控件),有两个问题要问大家:
1、点击ImageButton后的处理代码应该放在哪里?
2、动态生成几个基本控件的代码应该放在哪里?(我现在放在Render里面,感觉有点不对)代码如下:
public myControl:WebControl
{
protected Panel pContainer; 
protected ImageButton btn1;//这两个btn的处理代码应该放到哪里?
protected ImageButton btn2;public bool ShowLabel1
{
   get{ obj = ViewState["Label1"];
        return ((obj==null)? true:(bool)ViewState["Label1"]);
      }
   set{ ViewState["Label1"] = value;}
}protected override void Render( HtmlTextWriter writer )
{
InitData();
pContainer .RenderControl(writer);
} public InitData()
{
Label Lable1 = new Label();
Label1.text = "111111";
Label Lable2 = new Label();
Label2.text = "22222";Label Lable3 = new Label();
Label3.text = "444444";
Label Lable4 = new Label();
Label4.text = "4444444";if(pContainer ==null)
   pContainer = new Panel();pContainer .Controls.Add(btn1);
pContainer .Controls.Add(btn2);if(ShowLabel1)
{ pContainer .Controls.Add(Label1);
  pContainer .Controls.Add(Label2);
}
else
{ pContainer .Controls.Add(Label1);
  pContainer .Controls.Add(Label2);
}override protected void OnInit(EventArgs e)
{
base.OnInit(e);
}......//这里是其他代码
}请大家帮忙,多谢!
在线等

解决方案 »

  1.   

    你应该把生成控件的逻辑放到一个方法中。
    在ImageButton.Click时要生成一次,不过你要用ViewState记住你生成了什么,例如ViewState["controltype"]=1;
    在LoadViewState后,或者CreateChildControls时也要生成一次,这个要依赖上次的数据,
    if(1.Equals(ViewState["controltype"]))
    {
       CreateControlType1();
    }
      

  2.   

    我在哪里添加对ImageButton的事件注册代码,就是说这句话放到哪里呢:
    btn1.Click += new ImageClickEventHandler(btn1_Click);
      

  3.   

    那你的btn1是在哪里new的?
      

  4.   

    就在InitData的方法里面,但是运行起来后就是不执行btn1_Click方法
      

  5.   

    我刚做了个例子,你去看看吧.
    http://community.csdn.net/Expert/TopicView1.asp?id=3445961