GridView OnSelectedIndexChanged事件未触发

时间:2012-02-06 20:10:48

标签: c# asp.net gridview

我正在尝试获取GridView的选定行,并且我知道我应该能够根据OnSelectedIndexChanged事件获取该信息。每当我点击该行时,事件都不会触发。

<asp:GridView ID="GridView1" runat="server" GridLines="None"
  Width="930px" CellPadding="4" ForeColor="#333333" 
  onselectedindexchanged="GridView1_SelectedIndexChanged2">
  <AlternatingRowStyle BackColor="White" />
  <EditRowStyle BackColor="#2461BF" />
  <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
  <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
  <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
  <RowStyle BackColor="#EFF3FB" />
  <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
  <SortedAscendingCellStyle BackColor="#F5F7FB" />
  <SortedAscendingHeaderStyle BackColor="#6D95E1" />
  <SortedDescendingCellStyle BackColor="#E9EBEF" />
  <SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>

protected void GridView1_SelectedIndexChanged2(object sender, EventArgs e)
{
    //string company = GridView1.SelectedRow.Cells[0].Text;
    Response.Redirect("Client_View.aspx", false);

}

任何有关此的帮助将不胜感激。我可以看到没有代码重置其对另一个事件的引用,我可以看到。

6 个答案:

答案 0 :(得分:10)

如果您只是点击GridView中的行,则不会触发该事件。您必须在行中使用某种按钮才能点击,这将触发RowCommand事件以及SelectedIndexChanged事件(如果您单击的行当然尚未被选中) 。它不完全像Windows Forms DataGridView =)

让事件触发的最简单方法是将此属性添加到GridView标记中:

AutoGenerateSelectButton="True"

这会创建一个“选择”LinkButton,当您点击它时会触发代码隐藏中的Gridview1_SelectedIndexChanged2事件。

编辑:为了澄清,您需要添加该属性:

<asp:GridView ID="GridView1" runat="server" GridLines="None" 
  Width="930px" CellPadding="4" ForeColor="#333333"  
  onselectedindexchanged="GridView1_SelectedIndexChanged2"
  AutoGenerateSelectButton="True" >

答案 1 :(得分:5)

您无法单击某行并让它处理SelectedIndexChanged事件。您只需在RowCreated事件中添加一些代码即可。

Protected Sub yourDataGrid_RowCreated(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles yourDataGrid.RowCreated
    If e.Row.RowType = DataControlRowType.DataRow Then
        e.Row.Attributes("onclick") = Me.Page.ClientScript.GetPostBackEventReference(Me.yourDataGrid, "Select$" & e.Row.RowIndex)
    End If
End Sub

答案 2 :(得分:4)

问这个问题已经过去几年了,我当然希望有问题的人弄清楚但是我有同样的问题,并且感谢其中一位响应者我弄清楚问题是什么

检查Gridview中的实际按钮行,并确保ButtonField中有CommandName="Select"。出于某种原因通常自动输入的代码未被添加。

答案 3 :(得分:1)

您可能需要将自定义事件连接到控件。首次在代码隐藏中创建控件时尝试这样的事情:

// Add event handler dynamically using C# syntax.
  GridView1.onselectedindexchanged += this.GridView1_SelectedIndexChanged2;

答案 4 :(得分:1)

如果您在选定的索引更改方法中有回发代码,则应该为false EnableEventValidation

  <%@ Page Title="" Language="C#" EnableEventValidation="false" MasterPageFile="~/Administration/Site.master" AutoEventWireup="true" CodeFile="CourseStatusReport.aspx.cs" Inherits="Administration_Reports_CourseStatusReport" %>

答案 5 :(得分:0)

根据@jadarmel27的建议启用选择。尝试事件初始化

protected void Page_Init(object sender, EventArgs e)
{
   GridView1.SelectedIndexChanged += this.GridView1_SelectedIndexChanged2;
}