您需要创建一个行可点击的 GridView。我为您提供了链接以及链接中的代码。如果您不熟悉 VB,则代码在 VB 中,有用户在评论部分将其转换为 C#。
Imports Microsoft.VisualBasic
Imports System.ComponentModel
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace SampleControls
Public Class MyGridView
Inherits System.Web.UI.WebControls.GridView
#Region "Properties"
<DefaultValue(False)> _
Public Property EnableRowClick() As Boolean
Get
Dim ret As Boolean = False
Dim obj As Object = ViewState("EnableRowClick")
If obj IsNot Nothing Then
ret = CBool(obj)
End If
Return ret
End Get
Set(ByVal value As Boolean)
ViewState("EnableRowClick") = value
End Set
End Property
#End Region
#Region "Event"
Private Shared ReadOnly RowClickedEventKey As Object = New Object
Public Custom Event RowClicked As EventHandler(Of GridViewRowClickedEventArgs) AddHandler(ByVal value As EventHandler(Of GridViewRowClickedEventArgs))
Events.AddHandler(RowClickedEventKey, value)
End AddHandler
RemoveHandler(ByVal value As EventHandler(Of GridViewRowClickedEventArgs))
Events.RemoveHandler(RowClickedEventKey, value)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As GridViewRowClickedEventArgs)
Dim ev As EventHandler(Of GridViewRowClickedEventArgs) = TryCast(Events(RowClickedEventKey), EventHandler(Of GridViewRowClickedEventArgs))
If ev IsNot Nothing Then
ev(sender, e)
End If
End RaiseEvent
End Event
Protected Overridable Sub OnRowClicked(ByVal e As GridViewRowClickedEventArgs)
RaiseEvent RowClicked(Me, e)
End Sub
#End Region
#Region "Postback handling"
Protected Overrides Sub RaisePostBackEvent(ByVal eventArgument As String)
If eventArgument.StartsWith("rc") Then
Dim index As Integer = Int32.Parse(eventArgument.Substring(2))
Dim args As New GridViewRowClickedEventArgs(Me.Rows(index))
OnRowClicked(args)
Else
MyBase.RaisePostBackEvent(eventArgument)
End If
End Sub
#End Region
#Region "Adding the wiring from client-side to server-side, causing the posback when row is clicked"
Protected Overrides Sub PrepareControlHierarchy()
MyBase.PrepareControlHierarchy()
If EnableRowClick Then
Dim i As Integer
For i = 0 To Rows.Count - 1
Dim argsData As String = "rc" & Rows(i).RowIndex.ToString()
Me.Rows(i).Attributes.Add("onclick", Page.ClientScript.GetPostBackEventReference(Me, argsData))
Next
End If
End Sub
#End Region
End Class
#Region "Custom event argument type"
Public Class GridViewRowClickedEventArgs
Inherits EventArgs
Private _row As GridViewRow
Public Sub New(ByVal row As GridViewRow)
_row = row
End Sub
Public ReadOnly Property Row() As GridViewRow
Get
Return _row
End Get
End Property
End Class
#End Region
End Namespace
Usage example
[aspx]
<%@ Register Namespace="SampleControls" TagPrefix="sc" %>
...
<sc:MyGridView ID="myGridView1" runat="server" AutoGenerateColumns=false EnableRowClick=true>
<Columns>
<asp:TemplateField HeaderText="Sample row header">
<ItemTemplate>
Sample row data
</ItemTemplate>
</asp:TemplateField>
</Columns>
</sc:MyGridView>[code-behind]
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim arr As New ArrayList()
arr.Add(1)
arr.Add(2)
arr.Add(3)
myGridView1.DataSource = arr
myGridView1.DataBind()
End If
End Sub Protected Sub myGridView1_RowClicked(ByVal sender As Object, ByVal e As SampleControls.GridViewRowClickedEventArgs) Handles myGridView1.RowClicked Response.Write("Index of the clicked row was: " + e.Row.RowIndex.ToString())
End Sub
关联:
http://aspadvice.com/blogs/joteke/archive/2006/01/07/14576.aspx#17887