我动态生成模板列(包含一个TextBox控件), 我不想在ItemDataBound事件中绑定,能不能象定义模板列自动绑定? 下面的绑定不能显示数据库中的值. public class EditStaffSalary : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dgStaffSalary; private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
try
{
}
} private void DataGridAddColumn( string strColumnName )
{
TemplateColumn tempcol = new TemplateColumn( );
ColumnTemplate mycol = new ColumnTemplate( strColumnName );
tempcol.HeaderText = "模板列头";
tempcol.HeaderStyle.CssClass = "buttontitle";
tempcol.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
tempcol.ItemTemplate = mycol;
this.dgStaffSalary.Columns.AddAt( 0, tempcol ); 
}}public class ColumnTemplate : ITemplate
{
private string TextBoxID = ""; public ColumnTemplate( string strID )
{
TextBoxID = strID.Trim();
} public void InstantiateIn(Control container)
{
TextBox mytb = new TextBox();
mytb.Width = 90;
mytb.ID = "tb" + TextBoxID;
mytb.Text = "<%# DataBinder.Eval(Container.DataItem,\"" + TextBoxID + "\") %>";
container.Controls.Add(mytb);
}
}

解决方案 »

  1.   

    要放在ItemDataBound或ItemCreate()事件中
      

  2.   

    public class DataGridTemplate : ITemplate
    {
       ListItemType templateType;
       string columnName;
       
       public DataGridTemplate(ListItemType type, string colname)
       {
          templateType = type;
          columnName = colname;
       }   public void InstantiateIn(System.Web.UI.Control container)
       {
          Literal lc = new Literal();
          switch(templateType)
          {
             case ListItemType.Header:
                lc.Text = "<B>" + columnName + "</B>";
                container.Controls.Add(lc);
                break;
             case ListItemType.Item:
                lc.Text = "Item " + columnName;
                container.Controls.Add(lc);
                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;
          }
       }
    }see:Creating Templates Programmatically in the DataGrid Controlhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingtemplatesprogrammaticallyindatagridcontrol.asp
      

  3.   

    acewang提供的MSDN我看了,帮助不大, 没有介绍动态绑定数据问题.
    另外我提个相关问题,我不知ASP.net的设计人员怎么想的(可能外国和国内不一样)
    DataGrid中模板列要设ItemTemplate和EditItemTemplate做什么?我认为是画蛇添足,
    在实际开发中EditItemTemplate应用比较少,一般都是在ItemType中编辑, 再执行保存等操作
    (难道用户要编辑时,还要进入编辑状态才能编辑?多麻烦)
      

  4.   

    http://www.cnblogs.com/lovecherry/archive/2005/03/25/125526.html
    http://www.cnblogs.com/lovecherry/archive/2005/03/26/126102.html
    http://www.cnblogs.com/lovecherry/archive/2005/05/01/148504.html
      

  5.   

    http://community.csdn.net/Expert/TopicView1.asp?id=3862564