看代码,继承Itemplate重写textbox,现在问题是如何在web页面持久化这个textbox控件的值,比如我在gridivew1中某列的    textbox就是个ValidateItem 填写的值 "aaaaaaa"   如果执行if(!Page.ispostBack)该textbox控件就会消失. 希望给出除了不在if(!Page.ispostBack)执行 或者先在web页面 执行Page.InIt()之外的方法.. 因为这样做,很多业务逻辑不好处理..
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public class ValidateItem:ITemplate
{
   
   private string colname;    public ValidateItem(string colname)
    {
        this.colname = colname;
       
    }    public void InstantiateIn(Control container)
    {
       
        TextBox tb = new TextBox();
        tb.DataBinding += new EventHandler(this.OnDataBinding);
        container.Controls.Add(tb);
        tb.ID = colname;
        tb.Style.Add("width", "50px");    }  
    public void OnDataBinding(object sender, EventArgs e)
    {
        try
        {            TextBox tb = (TextBox)sender;
           if(tb.NamingContainer.tostring().Contains("DetaisView")
            {
              DetaisView container =(DetaisView)tb.NamingContainer;
              tb.text= ((DetaisView)container.DataItem)[colname].ToString();
             }
             if(tb.NamingContainer.tostring().Contains("GridView")
             {
                GridViewRow container = (GridViewRow)tb.NamingContainer;
               tb.Text = ((DataRowView)container.DataItem)[colname].ToString();              } 
          
        }
        catch(Exception ee)
        {
            ExceptionWriter.WriteError("绑定失败! colname=" + colname,ee);
        }
    }
}

解决方案 »

  1.   

    这应该不是什么持久化吧,应该是没有加viewstatepublic string Text
    {
      get{return (string)ViewState["text"];}
      set{ViewState["text"]=value;}
    }
      

  2.   

    textbox就是个ValidateItem 填写的值 "aaaaaaa"  如果执行if(!Page.ispostBack)该textbox控件就会消失.
    我汗,没太看清楚。
    如果你想重写Textbox你可以直接继承TextBox public void InstantiateIn(Control container) 
        { 
          
            TextBox tb = new TextBox(); //重新NEW了,原来的值保不下来的
            tb.DataBinding += new EventHandler(this.OnDataBinding); 
            container.Controls.Add(tb); 
            tb.ID = colname; 
            tb.Style.Add("width", "50px");     } private TextBox colname;     public ValidateItem(TextBox colname) 
        { 
            this.colname = colname; 
          
        }     public void InstantiateIn(Control container) 
        { 
          
            TextBox tb = thisl.colname;//new TextBox(); 
            tb.DataBinding += new EventHandler(this.OnDataBinding); 
            container.Controls.Add(tb); 
            tb.ID = colname; 
            tb.Style.Add("width", "50px");     } 
    textbox不能序列化的,要实现typeconvertattribute这样的话就比较麻烦了