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

 

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

C#代码

<% @ 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 >

 

你可能感兴趣的:(html,server,C#,dropdown,asp.net,asp)