GridView动态添加模板列

转自:http://blog.csdn.net/Sandy945/article/details/4397142


GridView动态添加模板列 这个case 经常会遇到,网上相关资料也不少,

但是关于如何动态为添加在模板列中的控件添加事件却没有。本文就是为解决这种情况而写。

代码如下:

GridViewTemplateDemo.aspx

 

[xhtml] view plain copy
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewTemplateDemo.aspx.cs" Inherits="GridView_GridViewTemplateDemo" %>  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  3. <html xmlns="http://www.w3.org/1999/xhtml" >  
  4. <head id="Head1" runat="server">  
  5.    
  6.      <title>GridView动态添加模板列的例子</title>  
  7.    
  8.  </head>  
  9.    
  10.  <body>  
  11.    
  12.      <form id="form1" runat="server">  
  13.    
  14.        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">  
  15.    
  16.        </asp:GridView>  
  17.    
  18.      </form>  
  19.    
  20.  </body>  
  21.    
  22.  </html>   

GridViewTemplateDemo.aspx.cs

[c-sharp] view plain copy
  1. using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Collections;  
  5. using System.Web;  
  6. using System.Web.Security;  
  7. using System.Web.UI;  
  8. using System.Web.UI.WebControls;  
  9. using System.Web.UI.WebControls.WebParts;  
  10. using System.Web.UI.HtmlControls;  
  11. public partial class GridView_GridViewTemplateDemo : System.Web.UI.Page  
  12. {  
  13.     private DataTable getDateTable()  
  14.     {  
  15.         DataTable dt = new DataTable();  
  16.         dt.Columns.Add(new DataColumn("ID"typeof(Int32)));  
  17.         dt.Columns.Add(new DataColumn("Name"typeof(String)));  
  18.         DataRow dr = dt.NewRow();  
  19.         dr[0] = 1;  
  20.         dr[1] = "01";  
  21.         dt.Rows.Add(dr);  
  22.         dr = dt.NewRow();  
  23.         dr[0] = 2;  
  24.         dr[1] = "01011";  
  25.         dt.Rows.Add(dr);  
  26.         dr = dt.NewRow();  
  27.         dr[0] = 3;  
  28.         dr[1] = "0120";  
  29.         dt.Rows.Add(dr);  
  30.         dr = dt.NewRow();  
  31.         dr[0] = 4;  
  32.         dr[1] = "01001";  
  33.         dt.Rows.Add(dr);  
  34.         dr = dt.NewRow();  
  35.         dr[0] = 5;  
  36.         dr[1] = "0105";  
  37.         dt.Rows.Add(dr);  
  38.         return dt;  
  39.     }  
  40.   
  41.     protected override void OnInit(EventArgs e)  
  42.     {  
  43.         TemplateField customField = new TemplateField();  
  44.   
  45.         customField.ShowHeader = true;  
  46.         customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");         
  47.         GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "lbtn""Name");  
  48.         gvt.eh += new GridViewTemplate.EventHandler(lbtn_Click);  
  49.         customField.ItemTemplate = gvt;  
  50.         GridView1.Columns.Add(customField);  
  51.         base.OnInit(e);  
  52.     }  
  53.    
  54.     protected void Page_Load(object sender, EventArgs e)  
  55.     {  
  56.         if (!IsPostBack)  
  57.         {  
  58.             GridView1.DataSource = getDateTable();  
  59.             GridView1.DataBind();  
  60.         }  
  61.     }  
  62.    
  63.     public void lbtn_Click(object sender, EventArgs e)  
  64.     {  
  65.         ClientScript.RegisterStartupScript(GetType(), "test""alert('ok');"true);  
  66.     }  
  67. }  
  68.    
  69.      public class GridViewTemplate : ITemplate  
  70.    
  71.      {  
  72.          public delegate void EventHandler(object sender, EventArgs e);  
  73.          public event EventHandler eh;  
  74.    
  75.          private DataControlRowType templateType;  
  76.    
  77.          private string columnName;  
  78.          private string controlID;  
  79.    
  80.     
  81.    
  82.          public GridViewTemplate(DataControlRowType type, string colname)  
  83.    
  84.          {  
  85.    
  86.              templateType = type;  
  87.    
  88.              columnName = colname;  
  89.    
  90.          }  
  91.          public GridViewTemplate(DataControlRowType type,string controlID, string colname)  
  92.          {  
  93.              templateType = type;  
  94.              this.controlID = controlID;  
  95.              columnName = colname;  
  96.          }  
  97.     
  98.    
  99.     public void InstantiateIn(System.Web.UI.Control container)   
  100.     {  
  101.         switch (templateType)  
  102.         {  
  103.             case DataControlRowType.Header:  
  104.                 Literal lc = new Literal();  
  105.                 lc.Text = columnName;  
  106.                 container.Controls.Add(lc);  
  107.                 break;  
  108.             case DataControlRowType.DataRow:              
  109.                 LinkButton lbtn = new LinkButton();  
  110.                 lbtn.ID = this.controlID;  
  111.                 if (eh != null)  
  112.                 {  
  113.                     lbtn.Click += new System.EventHandler(eh);  
  114.                 }  
  115.                 lbtn.DataBinding+=new System.EventHandler(lbtn_DataBinding);  
  116.                   
  117.                 container.Controls.Add(lbtn);  
  118.                   
  119.                 break;  
  120.             default:  
  121.                 break;  
  122.         }  
  123.     }  
  124.      void lbtn_DataBinding(object sender, EventArgs e)  
  125.      {  
  126.          LinkButton lbtn = sender as LinkButton;  
  127.          if (lbtn != null)  
  128.          {  
  129.              GridViewRow container = lbtn.NamingContainer as GridViewRow;  
  130.              if (container != null)  
  131.              {  
  132.                  object dataValue = DataBinder.Eval(container.DataItem, columnName);  
  133.                  if (dataValue != DBNull.Value)  
  134.                  {  
  135.                      lbtn.Text = dataValue.ToString();  
  136.                  }  
  137.              }  
  138.          }  
  139.      }  
  140.   
  141.    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值