gridview动态添加、删除模版列

VS2005 GridView

模版类

public class GridViewTemplate : ITemplate
    {
        //private DataControlRowType templateType;
        //private string columnName;
        ListItemType templateType;
        string columnName;

        //public GridViewTemplate(DataControlRowType type, string colname)
        public GridViewTemplate(ListItemType type, string colname)
        {
            templateType = type;   
            columnName = colname;
        }

        public void InstantiateIn(System.Web.UI.Control container)
        {
            switch (templateType)
            {
                case ListItemType.Header:
                    //lc.Text = "<B>" + columnName + "</B>";
                    //container.Controls.Add(lc);
                    break;
                case ListItemType.Item:
                    Table Table1 = new Table();
                    Table1.ID = "Table1";
                    container.Controls.Add(Table1);
                    //DropDownList drr = new DropDownList();
                    //drr.ID = "dropdown";
                    //drr.AppendDataBoundItems = true;
                    //drr.Items.Add(new ListItem("-----请选择------", ""));
                    //drr.Items.Add(new ListItem("AA", "a"));
                    //drr.Items.Add(new ListItem("BB", "b"));
                    //drr.Items.Add(new ListItem("CC", "c"));
                    //container.Controls.Add(drr);
                    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;
            }  

        }
    }

  private   void   Page_Load(object   sender,   System.EventArgs   e)  
{    
 TemplateField field = new TemplateField();
        field.HeaderStyle.Wrap = false;
        field.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
        field.HeaderText = tab.Rows[0]["show_name"].ToString();
        //field.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
        field.ItemTemplate = new GridViewTemplate(ListItemType.Item, "");
        this.GridView1.Columns.Add(field);
}

 msdn帮助

DataGrid   控件可以包含模板列,在该模板列中,您可以通过添加控件和文本来布局列。与绑定列、按钮列和超级链接列相比,模板列提供了更大的灵活性。正如   DataList   控件和   Repeater   控件的模板一样,您可以动态创建   DataGrid   控件的模板,从而可以在运行时定义列的内容、布局和数据。  
   
  注意       使用动态模板列的过程与在   Repeater   控件或   DataList   控件中使用动态模板的过程类似。有关创建动态模板的一般信息,请参见动态创建   Web   服务器控件模板。  
  下面是在   DataGrid   控件中使用动态模板与在   Repeater   或   DataList   控件中使用动态模板的区别:    
   
  请不要为网格本身创建项模板,而是为网格中的列创建项模板。    
  DataGrid   列的模板与   Repeater   或   DataList   控件的模板稍有不同。DataGrid   列不包括交替项或分隔符模板。但是,与   DataList   控件类似,DataGrid   列确实包括   EditItem   模板。    
  创建动态模板列    
   
  创建实现   System.Web.UI   命名空间的   ITemplate   接口的模板类。有关详细信息,请参见动态创建   Web   服务器控件模板。    
  您也可以将值传递到类的构造函数,类可以使用该值来确定要创建的模板类型(ItemTemplate、EditItemTemplate,等等)。    
  通常,使用   DataGrid   控件中已定义的   ListItemType   枚举中的值来传递该模板类型。    
   
  在该类中,实现   InstantiateIn   方法(ITemplate   接口的唯一成员)。此方法提供将文本实例和控件实例插入指定容器的方法。    
  下面的示例显示动态模板列的模板类。构造函数接受两个参数:第一个参数指定要创建的模板类型,第二个参数用于传入所创建列的名称。由于它是   DataGrid   控件的模板,所以该类包括创建包含   Textbox   控件的   EditItem   模板的代码。    
   
  '   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;  
              }  
        }  
  }  
  在为动态模板列创建类后,可以使用它在运行时将列分配给   DataGrid   控件。  
   
  使用动态模板列    
   
  创建   TemplateColumn   类的实例。    
  创建动态模板的实例,如果合适的话,将一个项类型值传递给它。    
  将该实例分配给您在第   1   步中创建的   TemplateColumn   对象的模板属性之一,如   ItemTemplate、EditItemTemplate、HeaderTemplate,等等。    
  下面的示例显示如何使用动态模板列将两个列添加到   DataGrid   控件中。在此示例中,在将控件绑定到它的数据源之前,在页加载期间,将模板实例化。    
   
  '   Visual   Basic  
  Private   Sub   Page_Load(ByVal   sender   As   System.Object,   _  
        ByVal   e   As   System.EventArgs)   Handles   MyBase.Load  
        Dim   tc1   As   New   TemplateColumn()  
        tc1.HeaderTemplate   =   New   _  
              DataGridTemplate(ListItemType.Header,   "Column1")  
        tc1.ItemTemplate   =   New   DataGridTemplate(ListItemType.Item,   _  
              "Column1")  
        tc1.EditItemTemplate   =   New   _  
              DataGridTemplate(ListItemType.EditItem,   "Column1")  
        tc1.FooterTemplate   =   New   _  
              DataGridTemplate(ListItemType.Footer,   "Column1")  
        DataGrid1.Columns.Add(tc1)  
         
        Dim   tc2   As   New   TemplateColumn()  
        tc2.HeaderTemplate   =   New   _  
              DataGridTemplate(ListItemType.Header,   "Column2")  
        tc2.ItemTemplate   =   New   _  
              DataGridTemplate(ListItemType.Item,   "Column2")  
        tc2.EditItemTemplate   =   New   _  
              DataGridTemplate(ListItemType.EditItem,   "Column2")  
        tc2.FooterTemplate   =   New   _  
              DataGridTemplate(ListItemType.Footer,   "Column2")  
        DataGrid1.Columns.Add(tc2)  
        SqlDataAdapter1.Fill(DsCategories1)  
        DataGrid1.DataBind()  
  End   Sub  
   
  //   C#  
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
        TemplateColumn   tc1   =   new   TemplateColumn();  
        tc1.HeaderTemplate   =   new    
              DataGridTemplate(ListItemType.Header,   "Column1");  
        tc1.ItemTemplate   =   new    
              DataGridTemplate(ListItemType.Item,   "Column1");  
        tc1.EditItemTemplate   =   new    
              DataGridTemplate(ListItemType.EditItem,   "Column1");  
        tc1.FooterTemplate   =   new    
              DataGridTemplate(ListItemType.Footer,   "Column1");  
        DataGrid1.Columns.Add(tc1);  
   
        TemplateColumn   tc2   =   new   TemplateColumn();  
        tc2.ItemTemplate   =   new    
              DataGridTemplate(ListItemType.Item,   "Column2");  
        tc2.HeaderTemplate   =   new    
              DataGridTemplate(ListItemType.Header,   "Column2");  
        tc2.EditItemTemplate   =   new    
              DataGridTemplate(ListItemType.EditItem,   "Column2");  
        tc2.FooterTemplate   =   new    
              DataGridTemplate(ListItemType.Footer,   "Column2");  
        DataGrid1.Columns.Add(tc2);  
        sqlDataAdapter1.Fill(dsCategories1);  
        DataGrid1.DataBind();  
  }  
  请参见  

  Web   服务器控件模板   |   动态创建   Web   服务器控件模板  

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值