日期:2014-05-19  浏览次数:20447 次

gridview中使用itemplate中的自定义控件为什么在postback后控件没有了
自己定义了一个itemplate,
public   class   MutiSelectTemplate   :   ITemplate
        {
                public   MutiSelectTemplate()
                {
                }

                #region   ITemplate   成员

                public   void   InstantiateIn(Control   container)
                {
                        CheckBox   checkbox=   new   CheckBox();
                        checkbox.ID   =   "SelectMutiWTD ";
                        container.Controls.Add(checkbox);
                }

                #endregion
        }

在gridview中动态添加
private   void   BindGridViewCell(GridView   gridView)
{
.....
TemplateField   templateField   =   new   TemplateField();
templateField.HeaderText   =   "选择 ";
templateField.ItemTemplate=new   MutiSelectTemplate();
gridView.Columns.Add(templateField);
}

pageload语句
  protected   void   Page_Load(object   sender,   EventArgs   e)
        {
               
                if   (!IsPostBack)
                        BindGridViewCell(GridView1);
                //AddTemplateField(GridView1);
        }
结果当postback后,itemplate的CheckBox不见了
如果将templateField.ItemTemplate=new   MutiSelectTemplate();单独拿出来,放入AddTemplateField(GridView1);函数中,去掉上面Page_Load的注释就可以显示出来了,请问是什么原因???

------解决方案--------------------
呵呵,你的控件状态没有保存,所以刷新以后就不见了;
去掉if (!IsPostBack)
正解!