로 사용자를 리디렉션해야하는 코드는 다른 페이지로 사용자를 안내 할 할 것입니다 행 클릭 가능한 GridView를 만들어야합니다. 링크의 코드뿐만 아니라 링크를 제공했습니다. 이 코드는 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
LINK :
http://aspadvice.com/blogs/joteke/archive/2006/01/07/14576.aspx#17887
출처
2012-08-07 20:39:23
KKP