if (!IsPostBack)
            {
                BindDate();
            }
  public void BindDate()
        {
            #region 动态生成列前准备工作
            BoundField bf = null;//定义列
            GridView1.Columns.Clear();//清空列
            GridView1.AutoGenerateColumns = false; //自动生成列取消
            System.Text.StringBuilder sb = new System.Text.StringBuilder();//将字段数组变成字符串,用于分页传参
            #endregion             #region 添加自定义列
            TemplateField tfColumn = new TemplateField();//实例化自定义列
            tfColumn.HeaderText = "选择";
            tfColumn.ItemTemplate = new MyTemplate("", DataControlRowType.DataRow, PassID == null ? " " : PassID);
            GridView1.Columns.Add(tfColumn);
            #endregion            #region 通过传的字段名,动态生成普通数据列
            for (int i = 0; i < Head.Length; i++)
            {
                bf = new BoundField();
                bf.DataField = Field[i].ToString().Replace('[',' ').Replace(']',' ').Trim();//数据字段
                bf.HeaderText = Head[i].ToString();//字段标题
                bf.SortExpression = Field[i].ToString();//用于字段正反排序
                sb.Append(Field[i].ToString() + ",");//分页传参
                GridView1.Columns.Add(bf);//添加字段
               
            }
            #endregion}
上面是主要代码。这个是在用户控件中写的。
现在的问题就是,页面回传的时候,自定义列消失。消失后就取不到绑定的ID了,郁闷死,查了很多资料。如果BindDate()不放在!ispostback里,能解决问题,但效率很低。
我在页面层使用这个控件的时候,以删除功能为例,得执行两遍BindDate().求解决方法。