2012-08-07 4 views
0
protected void GridViewAddress_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     // Make sure the current GridViewRow is a data row. 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      // Make sure the current GridViewRow is either 
      // in the normal state or an alternate row. 
      if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) 
      { 
       // Add client-side confirmation when deleting. 
       ((LinkButton)e.Row.Cells[1].Controls[0]).Attributes["onclick"] = "if(!confirm('Are you certain you want to delete this person ?')) return false;"; 
      } 
     } 
    } 



    } 
} 

내 질문은 내가 내 표 뷰 클릭을하고 .This 내가 이벤트를 캐치하고 다른클릭 할 수있는 gridview

답변

0

로 사용자를 리디렉션해야하는 코드는 다른 페이지로 사용자를 안내 할 할 것입니다 행 클릭 가능한 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

관련 문제