我正在尝试在 ASP.NET 中实现一个 DataGrid,并希望实现自定义分页,这样我就不必一次性提供所有数据。我花了几个小时在互联网上研究,但没有发现任何有用的东西。

当我查看页面时,我看到网格中的第一组结果,上一个链接被禁用。但是,当我单击“下一步”时,我再次看到网格的第一页禁用了上一个链接。在调试代码时,我确定 MyGrid_PageIndexChanged() 事件处理程序从未被调用。

我在下面包含了我的简化代码。我更改了变量名称并省略了方法以专注于数据网格分页问题。

在 ASPX 文件中:

<asp:DataGrid ID="myGrid" runat="server" GridLines="None" UseAccessibleHeader="true" AutoGenerateColumns="false" AllowPaging="true" AllowCustomPaging="true" PageIndexChanged="MyGrid_PageIndexChanged">
<PagerStyle Mode="NextPrev" NextPageText="Next >" PrevPageText="< Previous" />

<Columns>
<asp:BoundColumn HeaderText="Title" DataField="Name" />
<asp:BoundColumn HeaderText="Date" DataField="Date" />
</Columns>
</asp:DataGrid>

在 CS 文件中:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
                            myGrid.PageSize = 20;
                            myGrid.VirtualItemCount = GetNumItems();
            BindMyGrid();
        }
    }

    protected void MyGrid_PageIndexChanged(object sender, DataGridPageChangedEventArgs e)
    {
        myGrid.CurrentPageIndex = e.NewPageIndex;
        BindMyGrid();
    }

    private int GetNumItems()
    {
        return 500;
    }

    private void BindMyGrid()
    {
            Data[] array = GetDataFromInternetSomehow();
            this.myGrid.DataSource = array;
            this.myGrid.DataBind();
    }

    private class Data
    {
        public string Date { get; set; }
        public string Name { get; set; }
    }

对此的任何想法将不胜感激。

最佳答案

您的 ASPX 中存在错误:要连接 PageIndexChanged 事件处理程序,请使用属性 OnPageIndexChanged (而不是代码中的 PageIndexChanged ):

<asp:DataGrid ID="myGrid" runat="server"
   OnPageIndexChanged="MyGrid_PageIndexChanged"  /// <--- here's the error
   ...

然后,如果您有 AllowCustomPaging="true" ,您必须确保 GetDataFromInternetSomehow() 方法将只返回当前选定页面的数据,例如将当前页面传递给该方法并仅返回相应的数据:
GetDataFromInternetSomehow(e.NewPageIndex);

否则,禁用自定义分页,它将正常工作(但每次都会加载所有数据)。

关于ASP.NET DataGrid 和自定义分页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/475982/

10-11 22:16
查看更多