GridView OnSelectedIndexChanged 事件未触发

问题描述 投票:0回答:7

我正在尝试获取

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);

}

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

c# asp.net gridview
7个回答
12
投票

如果您只是单击

GridView
中的行,则不会触发该事件。您必须在行中有某种按钮才能单击,这将触发
RowCommand
事件以及
SelectedIndexChanged
事件(当然,如果您单击的行尚未选择)。它与 Windows 窗体 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" >

7
投票

您不能单击一行并让它处理

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

4
投票

这个问题被问到已经有几年了,我当然希望有问题的人能解决这个问题,但我也遇到了同样的问题,感谢其中一位回复者,我弄清楚了问题是什么。

检查 Gridview 中的实际按钮行,并确保 ButtonField 中有

CommandName="Select"
。由于某种原因,通常自动输入的那个代码没有被添加。


2
投票

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

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

1
投票

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

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

0
投票

按照

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

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

0
投票

我最近在 Visual Studio 2022 中的一个 ASPX 表单上遇到了此错误/错误,其中调试器无法命中触发的事件。根据我的经验,当您从其他文件复制标记/代码时,会显示这种奇怪的行为。附加事件的特定控件会导致此问题。

我采取的步骤(多次):

  • 我重新检查标记和代码。
  • 重新启动 Visual Studio
  • 从 temp 和 .vs 文件夹中删除数据
  • 清理并重建项目

最后,我创建了一个新表单并手动添加了控件标记。 这样就成功了。

© www.soinside.com 2019 - 2024. All rights reserved.