ASP.NET 2.0 中动态添加 GridView 模板列的例子

动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView 模板列的例子。

<% @ Page Language = " C# "   %>
<% @ Import Namespace = " System.Data "   %>
<! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "
 
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >

< script runat = " server " >
  ICollection CreateDataSource()
  {
    DataTable dt 
=   new  DataTable();
    DataRow dr;
    dt.Columns.Add(
new  DataColumn( " id " typeof (Int32)));
    dt.Columns.Add(
new  DataColumn( " text " typeof ( string )));
    
for  ( int  i  =   0 ; i  <   6 ; i ++ )
    {
      dr 
=  dt.NewRow();
      dr[
0 =  i;
      dr[
1 =   " 列表项目  "   +  i.ToString();
      dt.Rows.Add(dr);
    }
    DataView dv 
=   new  DataView(dt);
    
return  dv;
  }

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

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

    
public   void  InstantiateIn( System.Web.UI.Control container )
    {
      
switch  (templateType)
      {
        
case  DataControlRowType.Header:
          Literal lc 
=   new  Literal();
          lc.Text 
=  columnName;          
          container.Controls.Add(lc);          
          
break ;
        
case  DataControlRowType.DataRow:
          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 ;
        
default :
         
break ;
      }
    }
  }
  
  
protected   void  Page_Load( object  sender, EventArgs e)
  {
    
if  ( ! IsPostBack)
    {
      TemplateField customField 
=   new  TemplateField();
      customField.ShowHeader 
=   true ;
      customField.HeaderTemplate 
=   new  GridViewTemplate(DataControlRowType.Header,  " 动态添加列 " );
      customField.ItemTemplate 
=   new  GridViewTemplate(DataControlRowType.DataRow,  "" );
      GridView1.Columns.Add(customField);
      GridView1.DataSource 
=  CreateDataSource();
      GridView1.DataBind();
    }
  }

  
protected   void  GridView1_RowDataBound(  object  sender, GridViewRowEventArgs e )
  {
    
if  (e.Row.RowType  ==  DataControlRowType.DataRow)
    {
      
// 可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。
      
// 下面只是例子,举一反三,不再费话了
      DataRowView gv  =  (DataRowView)e.Row.DataItem;
      
int  itemSeleted  =  Int32.Parse(gv.Row[ " id " ].ToString())  >   3   ?   0  : Int32.Parse(gv.Row[ " id " ].ToString());
      DropDownList dr 
=  (DropDownList)e.Row.FindControl( " dropdown " );
      dr.SelectedIndex 
=  itemSeleted;
    }
  }
</ script >

< html xmlns = " http://www.w3.org/1999/xhtml " >
< head id = " Head1 "  runat = " server " >
  
< title > GridView动态添加模板列的例子 </ title >
</ head >
< body >
< form id = " form1 "  runat = " server " >
  
< asp:GridView ID = " GridView1 "  runat = " server "  AutoGenerateColumns = " False "
     OnRowDataBound
= " GridView1_RowDataBound " >
    
< Columns >
      
< asp:BoundField HeaderText = " 标题 "   DataField = " text " />
    
</ Columns >
  
</ asp:GridView >  
</ form >
</ body >
</ html >

你可能感兴趣的:(GridView)