最近遇到的问题是首先编程生成一个gridview,然后往其中增加模板列,其中就有textbox模板.经查要实现Itemplate接口的InstantiateIn方法,而InstantiateIn方法中必须重新构造textbox,这样以来原来textbox中的属性和事件均不能传递过去
以下是部分代码:
GridView gridview=new GrdiView();
Textbox tb=new TextBox();
tb.id="test";
tb.textchanged+=....;
TemplateField texttemp=new TemplateField();
TextTemplate text=new TextTemplate(tb);
texttemp.itemplate=text;
gridview.Columns.Add(texttemp);
 
自定义的texttemplate模板类如下
  public class TextBoxTemplate : ITemplate
    {
               private TextBox _tb;
       
        
        public TextBoxTemplate(TextBox tb)
        {
                       this._tb = tb;
        
       
        }
              public void InstantiateIn(Control container)
        {
            TextBox tb = new TextBox();    //得重新构造一个textbox,原来想直接吧textbox传进来,但是新增一行数据就出问题了   
                                tb.DataBinding += new EventHandler(this.OnDataBinding);
            container.Controls.Add(tb);
            
        }
 public void OnDataBinding(object sender, EventArgs e)
        {
            TextBox tb = (TextBox)sender;
            GridViewRow container = (GridViewRow)tb.NamingContainer;
            tb.Text = ((DataRowView)container.DataItem)[this._colname].ToString();
        }

解决方案 »

  1.   

    类似datagrid里面的itemdatabound属性不行吗?
      

  2.   

    得重新构造一个textbox,原来想直接吧textbox传进来,但是新增一行数据就出问题了   
    ——————————————————————————————————————————
    说明白你的意思?!
      

  3.   

    原来想直接传进去一个textbox,因为 每一个textbox必须使用同一种风格,而且必须绑定textboxchanged事件,新增一行数据重新绑定gridview时,会出现textbox丢失现象
    如下:
    新增前:
    textbox textbox
    新增一列后:textbox textbox
    上一列会出现空白 ,就是这个问题
      

  4.   

    那么你的  gridview.Columns.Add(texttemp);相关代码没有在“新增一行数据重新绑定gridview时”执行。你都是在什么时候调用这段代码
      

  5.   

    在init时调用的代码,应该执行了 新增后能看得到其他列增加了行,就只有templatefield列的出现空白