打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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   服务器控件模板  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Creating Templates Programmatically in the DataGrid Control
DataTable更改列名称
C#获取本地SQLServer中所有的数据库名放在下拉框里
在WPF中获取DataGridTemplateColumn模板定义的内容控件
DataGridView控件用法(一)绑定数据
求出datatable的列名
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服