GridView动态添加模板列(VB.NET版)

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

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

代码如下:

GridViewTemplateDemoVB.aspx

 

GridViewTemplateDemoVB.aspx.vb

 

  1. Imports System.Data  
  2.   
  3. Partial Class GridView_GridViewTemplateDemoVB  
  4.     Inherits System.Web.UI.Page  
  5.     Private Function CreateDataSource() As ICollection  
  6.         Dim dt As New DataTable()  
  7.         Dim dr As DataRow  
  8.         dt.Columns.Add(New DataColumn("id"GetType(Int32)))  
  9.         dt.Columns.Add(New DataColumn("Name"GetType(String)))  
  10.         For i As Integer = 0 To 5  
  11.   
  12.             dr = dt.NewRow()  
  13.             dr(0) = i  
  14.             dr(1) = "Name" & i.ToString()  
  15.   
  16.             dt.Rows.Add(dr)  
  17.         Next  
  18.         Return dt.DefaultView  
  19.     End Function  
  20.   
  21.     Protected Overloads Overrides Sub OnInit(ByVal e As EventArgs)  
  22.         Dim customField As New TemplateField()  
  23.         customField.ShowHeader = True  
  24.         customField.HeaderTemplate = New GridViewTemplate(DataControlRowType.Header, "动态添加列")  
  25.         Dim gvt As New GridViewTemplate(DataControlRowType.DataRow, "lbtn""Name")  
  26.         AddHandler gvt.eh, AddressOf lbtn_Click  
  27.         customField.ItemTemplate = gvt  
  28.         gv.Columns.Add(customField)  
  29.         MyBase.OnInit(e)  
  30.     End Sub  
  31.     Protected Sub lbtn_Click(ByVal sender As ObjectByVal e As System.EventArgs)  
  32.         ' do sth  
  33.         Response.Write("PageLoad: lbtn_Click")  
  34.     End Sub  
  35.     Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load  
  36.         If Not IsPostBack Then  
  37.             gv.DataSource = CreateDataSource()  
  38.             gv.DataBind()  
  39.         End If  
  40.     End Sub  
  41. End Class  
  42. Public Class GridViewTemplate  
  43.     Implements ITemplate  
  44.     Public Delegate Sub EventHandler(ByVal sender As ObjectByVal e As EventArgs)  
  45.     Public Event eh As EventHandler  
  46.     Private templateType As DataControlRowType  
  47.     Private columnName As String  
  48.     Private controlID As String  
  49.   
  50.     Public Sub New(ByVal type As DataControlRowType, ByVal colname As String)  
  51.   
  52.         templateType = type  
  53.   
  54.         columnName = colname  
  55.     End Sub  
  56.     Public Sub New(ByVal type As DataControlRowType, ByVal controlID As StringByVal colname As String)  
  57.         templateType = type  
  58.         Me.controlID = controlID  
  59.   
  60.         columnName = colname  
  61.     End Sub  
  62.     Sub RaiseSampleEvent(ByVal sender As ObjectByVal e As EventArgs)  
  63.         RaiseEvent eh(sender, e)  
  64.     End Sub  
  65.     Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn  
  66.         Select Case templateType  
  67.             Case DataControlRowType.Header  
  68.                 Dim lc As New Literal()  
  69.                 lc.Text = columnName  
  70.                 container.Controls.Add(lc)  
  71.                 Exit Select  
  72.             Case DataControlRowType.DataRow  
  73.                 Dim lbtn As New LinkButton()  
  74.                 lbtn.ID = Me.controlID  
  75.                 If ehEvent IsNot Nothing Then  
  76.                     AddHandler lbtn.Click, AddressOf RaiseSampleEvent  
  77.                 End If  
  78.                 AddHandler lbtn.DataBinding, AddressOf lbtn_DataBinding  
  79.                 container.Controls.Add(lbtn)  
  80.                 Exit Select  
  81.             Case Else  
  82.   
  83.                 Exit Select  
  84.   
  85.         End Select  
  86.     End Sub  
  87.     Private Sub lbtn_DataBinding(ByVal sender As ObjectByVal e As EventArgs)  
  88.         Dim lbtn As LinkButton = TryCast(sender, LinkButton)  
  89.         If lbtn IsNot Nothing Then  
  90.             Dim container As GridViewRow = TryCast(lbtn.NamingContainer, GridViewRow)  
  91.             If container IsNot Nothing Then  
  92.                 Dim dataValue As Object = DataBinder.Eval(container.DataItem, columnName)  
  93.                 If Not IsDBNull(dataValue) Then  
  94.                     lbtn.Text = dataValue.ToString()  
  95.                 End If  
  96.             End If  
  97.         End If  
  98.     End Sub  
  99.   
  100. End Class  

  1. <%@ Page Language="VB" AutoEventWireup="false" CodeFile="GridViewTemplateDemoVB.aspx.vb" Inherits="GridView_GridViewTemplateDemoVB" %>  
  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 runat="server">  
  5.     <title>GridView动态添加模板列的例子</title>  
  6. </head>  
  7. <body>  
  8.     <form id="form1" runat="server">  
  9.     <asp:gridview ID="gv" AutoGenerateColumns="false"  runat="server"></asp:gridview>          
  10.     </form>  
  11. </body>  
  12. </html>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值