在Bound按钮中为GridView动态添加BoundField与TemplateField
            BoundField bf = new BoundField();
        bf.DataField = "moviename";
        bf.HeaderText = "名称";
        GridView1.Columns.Add(bf);
        BoundField bf1 = new BoundField();
        bf1.DataField = "imageurl";
        bf1.HeaderText = "图片路径";
        GridView1.Columns.Add(bf1);        TemplateField tf = new TemplateField();
        tf.HeaderText = "选择";
        tf.ItemTemplate = new tm(DataControlRowType.DataRow, "", "CbSelect");       
       //GridView1.Columns.Insert(0,tf);
       GridView1.Columns.Add(tf);但当在点击别一个按钮(Refreash)回传时,只有BoundField的字段会保存住,而TemplateField的消失!
这是什么原因呢?
难到说只有BoundField 的字段会被ViewState保存,而TemplateField不会吗?
如果是这样怎么让TemplateField的也会被缓存到ViewState中呢?是重写LoadViewState方法和SaveViewState方法吗?

解决方案 »

  1.   

    TemplateField比较灵活可以自己随便写啊。TemplateField与BoundField区别
      

  2.   

    我知道TemplateField比较灵活,但是我主要是想知道为什么点击按钮回传的时候BoundField的会被缓存,而TemplateField不会被缓存!!
      

  3.   

    晕~~没人知道~~BoundField为什么会被缓存,而TemplateField不会被缓存吗?
      

  4.   

    动态添加的控件无法维持状态,但你回传的时候这些动态添加的复选框就都没了
    ITemplate动态添加模版列
    http://topic.csdn.net/u/20091210/17/24fcd4e6-d8db-4d6b-88de-b3dcf098d75a.html?57895
      

  5.   

    wuyq11
     
    (人生如梦) 
    谢谢你的回复!~我这里的确是做的动态添加模块列~
    GridView里面一开始我直接加了一个TemplateField的字段主要是checkbox进行选择,然后,我通过两个按钮,分别绑定不同的datatable和不同字段. 在两个按钮中我没用GridView1.Columns.Clear()方法,而且用了一个这样的方法
    private void remove()
        {
            List<DataControlField> list = new List<DataControlField>();
            foreach (DataControlField df in GridView1.Columns)
            {
                if (df.GetType()==typeof(BoundField))
                {
                    list.Add(df);
                }
            }
            for (int i = 0; i < list.Count; i++)
            {
                GridView1.Columns.Remove(list[i]);
            }
        }
    先移出字段,然后在绑定字段.
     BoundField bf = new BoundField();
            bf.DataField = "typeid";
            bf.HeaderText = "类型ID";
            GridView1.Columns.Add(bf);
            BoundField bf1 = new BoundField();
            bf1.DataField = "id";
            bf1.HeaderText = "编号";
            GridView1.Columns.Add(bf1);        DataTable dt = DAL.ODBC_DBhelper.GetTab("select * from movie", null);
            databinds(dt);
    一开始点击按钮都正常,但多点几次之后,添加的TemplateField中的ItemTemplate就会消失!!
    是不是说ViewState对同一个TemplateField中的ItemTemplate属性,保存时间有限?
      

  6.   

    一开始,我也想过把
    TemplateField tf = new TemplateField();
            tf.HeaderText = "选择";
            tf.ItemTemplate = new tm(DataControlRowType.DataRow, "", "CbSelect");
            
           //GridView1.Columns.Insert(0,tf);
           GridView1.Columns.Add(tf);
    这段代码放到Page_Init(object sender,EventArgs e)
    里面去,这样一来,每次GridView在初始化的时候都可以先动态加载(其实我个人觉得就和加一个静态的模版列差不多)
    但是出现的情况也一样!~tf.ItemTemplate = new tm(DataControlRowType.DataRow, "", "CbSelect");
    中的 tf.ItemTemplate 中的内容运行几次以后就空了~~
    很头痛这个问题