【问题标题】:GridView OnSelectedIndexChanged event not firingGridView OnSelectedIndexChanged 事件未触发
【发布时间】:2012-02-28 07:25:05
【问题描述】:

我正在尝试获取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


    【解决方案1】:

    如果您只是单击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" >
    

    【讨论】:

      【解决方案2】:

      您不能单击一行并让它处理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
      

      【讨论】:

        【解决方案3】:

        问这个问题已经有几年了,我当然希望有问题的人能弄清楚,但我遇到了同样的问题,感谢其中一位响应者,我弄清楚了问题所在。

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

        【讨论】:

        • 如果我从 c# 创建选择按钮会怎样?像这样 gvSlots.SelectedIndexChanged += this.gvSlots_SelectedIndexChanged; gvSlots.AutoGenerateSelectButton = true;但我的 SelectedIndexChanged 仍然不起作用
        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 很遗憾这并不能解决问题
          • 您是否尝试过查看按键事件而不是网格视图的 SelectedIndexChanged 事件。
          • 不,我没有。我的印象是 selectedindexchange 事件就是我完成这项任务所需的全部。
          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 2013-02-03
            • 2011-08-17
            • 2012-12-13
            • 2012-08-25
            • 2013-12-31
            • 1970-01-01
            • 1970-01-01
            • 2014-02-20
            • 2013-09-13
            相关资源
            最近更新 更多