在page_load的事件中动态添加模版列:
 public class GridViewTemplate : ITemplate
    {
        ListItemType templateType;
        string columnName;
   
        public GridViewTemplate(ListItemType type, string colname)
        {
            templateType = type;    
            columnName = colname;
        }        public void InstantiateIn(System.Web.UI.Control container)
        {
            switch (templateType)
            {
                case ListItemType.Header:
                    //lc.Text = "<B>" + columnName + "</B>";
                    //container.Controls.Add(lc);
                    break;
                case ListItemType.Item:
                    DropDownList drr = new DropDownList();
                    drr.ID = "dropdown";
                    drr.AppendDataBoundItems = true;
                    drr.Items.Add(new ListItem("-----请选择------", ""));
                    drr.Items.Add(new ListItem("AA", "a"));
                    drr.Items.Add(new ListItem("BB", "b"));
                    drr.Items.Add(new ListItem("CC", "c"));
                    container.Controls.Add(drr);
                    break;
                case ListItemType.EditItem:
                    //TextBox tb = new TextBox();
                    //tb.Text = "";
                    //container.Controls.Add(tb);
                    break;
                case ListItemType.Footer:
                    //lc.Text = "<I>" + columnName + "</I>";
                    //container.Controls.Add(lc);
                    break;
            }   
        }
    }//page_load事件中邦定模版列
TemplateField field = new TemplateField();
                            field.HeaderStyle.Wrap = false;
                            field.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                            field.HeaderText = tab.Rows[0]["show_name"].ToString();
                            //field.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
                            field.ItemTemplate = new GridViewTemplate(ListItemType.Item, "");
                            this.GridView1.Columns.Add(field);
在gridviw翻页时模版列中的控件丢失
这种情况该怎么解决?

解决方案 »

  1.   

    你用Viewstate保存状态.然后在分页里重绑一下.就像分页的自定排序一下.
    我是用这种方法..不知还有未更好的!
      

  2.   

    是把TemplateField 放进去,还是把每行的数据都放进去
    没用过Viewstate,能说想详细些吗?
    或举个简单的例子
      

  3.   

    你分页这么实现的阿?自定义分页应该没有问题的、
    <a href='xx.aspx?page=1'>1</a> <a href='xx.aspx?page=2'>1</a> ...就不会有问题的
      

  4.   

    我是设置gridview的AllowPaging属性
    在GridView1_RowDataBound事件中为静态模版控件邦定数据,客户端事件
    翻页时点一次可以正常翻页,在点就会报错,找不到对象实例
    动态生成的模版控件的数据邦定实在gridview数据绑定后
    this.GridView1.DataSource = databing();
    this.GridView1.DataBind();
    //动态生成的模版控件的数据邦定for (int i = 0; i < GridView1.Rows.Count; i++)
                    {
                        TableRow tr = new TableRow();
                        TableCell td = new TableCell();
                        HyperLink HyperLink1 = new HyperLink();
                        Label lbl = new Label();
                            string activity = tab.Rows[i]["activity"].ToString();
                            string[] stract = activity.Split(',');                        for (int h = 0;h < stract.Length - 1; h++)
                            {
                                HyperLink1 = new HyperLink();                            HyperLink1.ID = "HyperLink" + stract[h];
                                HyperLink1.Text = "*";
                                HyperLink1.ForeColor = Color.Red;
                                HyperLink1.Target = "_top";
                                HyperLink1.NavigateUrl = "../Detaile.aspx?id=" + stract[h] + "&mainch=1&subch=activity&menuid=activity&itemid=activity025";                            lbl = new Label();
                                lbl.Text = " ";                            td.Controls.Add(HyperLink1);
                                td.Controls.Add(lbl);
                           }
                            tr.Cells.Add(td);
                            ((Table)e.Row.FindControl("Table6")).Rows.Add(tr);
                        }
      

  5.   

    动态模版列数据邦定放到
    GridView1_RowDataBound事件中,也有这样的错误,
    静态模版列 未将对象引用设置到对象的实例。
      

  6.   

    我已经把动态生成模版列换成了静态的模版列了,这样控件丢失也不会报错了那位大哥知道为什么会丢失控件?是bug吗