' Visual Basic
Private Class DataGridTemplate
   Implements ITemplate
   Dim templateType As ListItemType
   Dim columnName As String   Sub New(ByVal type As ListItemType, ByVal ColName As String)
      templateType = type
      columnName = ColName
   End Sub   Sub InstantiateIn(ByVal container As Control) _
      Implements ITemplate.InstantiateIn
      Dim lc As New Literal()
      Select Case templateType
         Case ListItemType.Header
            lc.Text = "<B>" & columnName & "</B>"
            container.Controls.Add(lc)
         Case ListItemType.Item
            lc.Text = "Item " & columnName
            container.Controls.Add(lc)
         Case ListItemType.EditItem
            Dim tb As New TextBox()
            tb.Text = ""
            container.Controls.Add(tb)
         Case ListItemType.Footer
            lc.Text = "<I>Footer</I>"
            container.Controls.Add(lc)
      End Select
   End Sub
End Class// C#
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;
      }
   }
}

解决方案 »

  1.   

    Creating Templates Programmatically in the DataGrid Control
    see:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingtemplatesprogrammaticallyindatagridcontrol.aspCreating Web Server Control Templates Dynamically
    see:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbtskcreatingwebservercontroltemplatesdynamically.asp
      

  2.   

    看看这篇文章
    http://tripleasp.net/tutorial.aspx?NavID=27
    把其中的genericitem改成textboxitem就可以了
      

  3.   

    按上面得方法我创建了新得类,但是如何在datagrid创建动态绑定得时候把它加进去呢?
      

  4.   

    void Bindgrid() {
    MyConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
    SqlDataAdapter myCommand = new SqlDataAdapter("SELECT SaleContractDetails.Contractid, SaleContractDetails.ContractName,SaleContractDetails.ContractNumber, SaleContractDetails.CustomerID, SaleContractDetails.OrderDate, SaleContractDetails.Otime,SaleContractDetails.RequiredDate, Customers.CompanyName,  Customers.Customerid AS Expr1 FROM SaleContractDetails INNER JOIN Customers ON SaleContractDetails.Customerid = Customers.Customerid WHERE SaleContractDetails.ProfessionalID="+Request.Params["ProfessionalID"]+" AND SaleContractDetails.Result = 0 ORDER BY ContractID DESC", MyConnection);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "SaleContractDetails");
    TemplateColumn tc;
    tc = new TemplateColumn();
    tc.HeaderText = "合同信息";
    tc.ItemTemplate = new DataGridTemplate(ListItemType.Item, "ContractName");
    tc.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
    tc.ItemStyle.HorizontalAlign=HorizontalAlign.Left;
    tc.ItemStyle.Width=(Unit)0.50;
    tc.ItemStyle.Wrap = false;
    MyDataGrid.Columns.Add(tc);
    ......
      

  5.   

    不是这个意思啊,我得意思是要将每个动态绑定的列变成TextBox
      

  6.   

    case ListItemType.Item:
                TextBox tb = new TextBox();
                  tb.Text = "columnName";
                 tb.DataBinding += new EventHandler(TemplateControl_DataBinding);
                container.Controls.Add(tb);
                break;
     ......
    private void TemplateControl_DataBinding(object sender, System.EventArgs e)
    {
       TextBox tb;
       tb = (TextBox) sender;
       DataGridItem container = (DataGridItem) tb.NamingContainer;
       tb.Text = ((DataRowView)container.DataItem)[columnName].ToString();
    }
    }
      

  7.   

    对不起
               TextBox tb = new TextBox();
                  tb.Text = "";
      

  8.   

    使用 事件和 委托:case ListItemType.Item:
                TextBox tb = new TextBox();
                  tb.Text = "columnName";
                 tb.DataBinding += new EventHandler(TemplateControl_DataBinding);
                container.Controls.Add(tb);
                break;
     ......
    private void TemplateControl_DataBinding(object sender, System.EventArgs e)
    {
       TextBox tb;
       tb = (TextBox) sender;
       DataGridItem container = (DataGridItem) tb.NamingContainer;
       tb.Text = ((DataRowView)container.DataItem)[columnName].ToString();
    }
    }