看代码,继承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);
}
}
}
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);
}
}
}
{
get{return (string)ViewState["text"];}
set{ViewState["text"]=value;}
}
我汗,没太看清楚。
如果你想重写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这样的话就比较麻烦了