ASP.NET DataGrid 和自定义分页

Posted

技术标签:

【中文标题】ASP.NET DataGrid 和自定义分页【英文标题】:ASP.NET DataGrid and custom paging 【发布时间】:2010-10-03 07:45:16 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

GetDataFromInternetSomehow(e.NewPageIndex);

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

【讨论】:

太棒了-谢谢。添加“开”使其工作 - 两个字母可以产生这样的差异。我认为在互联网上阅读示例时,我只是看到了该属性并想“是的,我明白了”。奇怪的是没有编译或运行时错误。 @SaqibI 知道这是旧的,但将此答案标记为已接受的答案。

以上是关于ASP.NET DataGrid 和自定义分页的主要内容,如果未能解决你的问题,请参考以下文章

asp.net中怎样调整datagrid 列的宽度

推荐用于开发 ASP.NET 用户和自定义控件的书籍 [关闭]

ASP.NET 在使用 Windows 身份验证和自定义角色提供程序时实现“充当”功能

asp.net中在Gridview中自定义一列操作,应该怎么做?

帮助解决关于 ASP.NET MVC 和自定义安全设计的两部分问题

使用 IdentityServer4、Asp.Net Core Identity 和自定义提供程序进行 Blazor WebAssembly 身份验证,无需实体框架