【问题标题】:OnPageIndexChanging event not triggered for GridView ASP.NETGridView ASP.NET 未触发 OnPageIndexChanging 事件
【发布时间】:2015-07-20 16:13:58
【问题描述】:

我一直使用 Stack Overflow 寻求帮助,但我从来没有在这个网站上发布我自己的问题。我对使用 ASP.NET Web 应用程序也有些陌生。我有一个 GridView,它显示来自数据源的记录,并允许分页查看网格的不同页面。网格加载正常并正确显示数据。我遇到的问题是,当单击页码时没有任何反应,并且没有为 Page_Load 或 OnPageIndexChanging 触发我的断点。在 MSDN 上,它说 OnPageIndexChanging 事件将在选择网格上的页码时触发,但这没有发生。我已经尝试了所有在网上找到的针对此问题的定期建议修复,但问题仍然存在。我在下面发布了我的代码。谁能告诉我什么可能导致这个事件没有被触发?提前致谢!

<asp:GridView ID="_grid" runat="server" AutoGenerateColumns="False" CellPadding="4" AutoPostBack="true"
                ForeColor="#333333" GridLines="None" AllowSorting="True" EnableTheming="False" DataSourceID="vw_SpecFoodBuyerCodeDataSource" Width="100%" AllowPaging="true" OnPageIndexChanging="_grid_PageIndexChanging" OnSelectedIndexChanged="_grid_OnSelectedIndexChanged">
                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <Columns>
                    <asp:TemplateField>
                        <EditItemTemplate>
                            <asp:CheckBox ID="CheckBox1" runat="server" />
                        </EditItemTemplate>
                        <HeaderTemplate>
                            <asp:CheckBox ID="_headerCheckBox" runat="server" AutoPostBack="True" OnCheckedChanged="_headerCheckBox_CheckedChanged" />
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:CheckBox ID="_rowCheckBox" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:HyperLinkField DataNavigateUrlFields="SpecId" DataNavigateUrlFormatString="~/SpecPdf.aspx?SpecId={0}"
                        DataTextField="SpecNumber" HeaderText="Spec#" SortExpression="SpecNumber" />
                    <asp:BoundField DataField="Revision" HeaderText="Rev" SortExpression="Revision" />
                    <asp:BoundField DataField="SCNumber" HeaderText="SC#" SortExpression="SCNumber" />
                    <asp:BoundField DataField="SCDescription" HeaderText="SC Description" SortExpression="SCDescription">
                        <ItemStyle HorizontalAlign="Left" Wrap="False" />
                    </asp:BoundField>
                    <asp:BoundField DataField="VendorName" HeaderText="Supplier" SortExpression="VendorName" >
                        <ItemStyle HorizontalAlign="Left" />
                    </asp:BoundField>
                    <asp:BoundField DataField="BuyerCode" HeaderText="Buyer" SortExpression="BuyerCode" />
                    <asp:BoundField DataField="ApprovedDate" HeaderText="Approved" DataFormatString="{0:d}" HtmlEncode="False" SortExpression="ApprovedDate" />
                    <asp:BoundField DataField="UpdateNeededDate" DataFormatString="{0:d}" HeaderText="Update Required&lt;br&gt;As Of" HtmlEncode="False" SortExpression="UpdateNeededDate" />
                    <asp:BoundField DataField="ApproveUpdateNeededDate" DataFormatString="{0:d}" HeaderText="Update Sent"
                        SortExpression="ApproveUpdateNeededDate" />
                    <asp:BoundField DataField="ReceivedUpdateNeededDate" DataFormatString="{0:d}" HeaderText="Update&lt;br&gt;Received" HtmlEncode="False" SortExpression="ReceivedUpdateNeededDate" />
                </Columns>
                <RowStyle BackColor="#EFF3FB" />
                <EditRowStyle BackColor="#2461BF" />
                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="White" />
            </asp:GridView>
<asp:LinqDataSource ID="vw_SpecFoodBuyerCodeDataSource" runat="server" ContextTypeName="PPQAD_QASpecFoodDataLinq.PPQAD_QASpecFoodDataContextManaged" EntityTypeName="" 
    OnSelecting="vw_SpecFoodBuyerCodeDataSource_Selecting" TableName="vw_SpecFoodBuyerCodes">
</asp:LinqDataSource>

还有 C# 代码

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            _buyerCodeListBox.DataSource = WebHelpers.GetCachedBuyerCodes(Page);
            _buyerCodeListBox.DataBind();
            _grid.PageIndexChanging += new GridViewPageEventHandler(_grid_PageIndexChanging);
            _grid.EnableViewState = true;
            SelectBuyerCodesForCurrentUser();
            _grid.DataBind();
        }
    }
protected void _grid_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        _grid.PageIndex = e.NewPageIndex;
        _grid.DataBind();
    }

【问题讨论】:

  • 可能是一个愚蠢的问题......但你确定你是在调试,而不是仅仅为了试图达到你的断点而运行吗?此外,我不认为 AutoPostBack 是网格视图的有效属性。
  • 这不是一个愚蠢的问题...是的,我正在调试,我在另一个 Stack Overflow 帖子中发现 AutoPostBack 需要设置为 true 才能使分页正常工作。我已经尝试过使用和不使用 AutoPostBack=true 并且没有任何改变。

标签: c# asp.net .net gridview visual-studio-2013


【解决方案1】:

应该是更多的评论然后回答,但以我的声誉我不能。所以...

问题可能在于您不想在 OnPageIndexChanging 上而是在 OnPageIndexChanged 上执行此操作。

问题也可能是因为您已将_grid_PageIndexChanging 附加到gridview 控制器的事件两次:第一次在.aspx 文件中的控制器定义中,第二次在Page_Load 中。但老实说 - 它无论如何都应该工作(被解雇两次不应该受伤)。但我认为这是因为您在进行错误研究后第二次附加它。

另外,我建议您在 Page_Load 中而不是在 Page_Init 中执行所有操作。 此事件处理程序在 Page_Load 之前,可以解决问题,因为在 Page_Load 上,gridview 可能已经呈现或启动?

【讨论】:

  • 感谢您的意见杰瑞。你假设我为什么两次附加事件处理程序是正确的,但它不应该有任何区别,就像你说的那样。我也尝试使用 OnPageIndexChanged 事件而不是 OnPageIndexChanging,我也遇到了同样的问题。 OnPageIndexChanged 事件也不会触发。我将尝试将代码放入 Page_Init 中,看看它是否有任何不同。再次感谢您的帮助。
  • 不幸的是,将 Page_Load 代码移动到 Page_Init 中并没有任何区别。问题依旧……
  • 嗯,这是一些非常丑陋的错误/问题。然后我建议收集有关 Web 服务器和 .NET 运行时的所有信息——也许有些东西已经过时或不兼容?我主要使用 xsp 服务器,它不支持一些东西。祝你好运!
【解决方案2】:

你在使用 SqlDataReader 吗?如果是,则更改为 DataSet。我也遇到过这种问题,但是当我更改为 DataSet 时,它起作用了。还要在_grid.PageIndex = e.NewPageIndex; 之后复制粘贴您的数据源

【讨论】:

  • 我目前没有使用 SqlDataReader,但在发布此问题之前,我确实使用 SqlDataReader 和 DataSet 进行了尝试。不幸的是,这并没有解决我的事件没有触发的问题。
  • 设置 PagerSettings-Mode="Numeric"。您的 GridVIew 中没有 PagerSettings-Mode。
  • 感谢基奥。我将 PagerSettings-Mode="Numeric" 放在 GridView 标记中,但仍然没有变化。点击分页号码时不会触发任何事件。
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多