You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridView分页报错:数据源不支持服务器端数据分页

解决GridView“数据源不支持服务器端数据分页”错误

嘿,这个问题我碰到过好多次了!你遇到的报错核心原因是:你绑定给GridView的数据源没有实现支持服务器端分页的接口(比如直接用了List、DataTable这类普通集合,它们本身不具备分页能力)。下面给你两种实用的解决思路:

方法1:用PagedDataSource包装数据源(快速适配)

这是最省事的方案,用.NET自带的PagedDataSource类把你的原始数据源(比如DataTable、List)包装成支持分页的格式,直接给GridView用就行:

改造你的绑定方法:

public void BindGridviewActivity()
{
    // 1. 先获取你的原始数据源(这里替换成你原来获取数据的逻辑)
    DataTable activityData = GetActivityDataFromDB(); // 比如从数据库查全量数据
    
    // 2. 用PagedDataSource包装
    PagedDataSource pagedData = new PagedDataSource();
    pagedData.DataSource = activityData.DefaultView; // 绑定原始数据源的视图
    pagedData.AllowPaging = true; // 开启分页
    pagedData.PageSize = gwActivity.PageSize; // 每页显示条数,和GridView保持一致
    pagedData.CurrentPageIndex = gwActivity.PageIndex; // 当前页码
    
    // 3. 绑定到GridView
    gwActivity.DataSource = pagedData;
    gwActivity.DataBind();
}

确保PageIndexChanging事件正确处理:

protected void gwActivity_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    // 更新当前页码
    gwActivity.PageIndex = e.NewPageIndex;
    // 重新绑定数据(关键!必须重新绑)
    BindGridviewActivity();
}

方法2:数据库层面分页(大数据量推荐)

如果你的数据量很大,全量查询再分页会浪费性能,建议直接在数据库里只查当前页的数据,同时返回总记录数让GridView知道总页数:

改造绑定方法(以SQL Server为例):

public void BindGridviewActivity(int currentPageIndex)
{
    int pageSize = gwActivity.PageSize;
    int startRow = currentPageIndex * pageSize + 1;
    int endRow = (currentPageIndex + 1) * pageSize;
    
    // 1. 分页查询当前页数据(用ROW_NUMBER()生成行号筛选)
    string pageSql = @"SELECT * FROM (
                           SELECT *, ROW_NUMBER() OVER(ORDER BY ActivityID DESC) AS RowNum
                           FROM YourActivityTable
                       ) AS TempTable
                       WHERE RowNum BETWEEN @StartRow AND @EndRow";
    
    // 执行SQL获取当前页的DataTable(这里替换成你的数据库操作逻辑)
    DataTable currentPageData = ExecuteSqlQuery(pageSql, startRow, endRow);
    
    // 2. 获取总记录数,用来显示总页数
    int totalRecords = GetTotalActivityCount(); // 比如执行SELECT COUNT(*) FROM YourActivityTable
    gwActivity.VirtualItemCount = totalRecords; // 设置总记录数
    
    // 3. 绑定数据
    gwActivity.DataSource = currentPageData;
    gwActivity.DataBind();
}

处理PageIndexChanging事件:

protected void gwActivity_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    gwActivity.PageIndex = e.NewPageIndex;
    // 传入新页码重新绑定
    BindGridviewActivity(e.NewPageIndex);
}

额外检查点:

  • 确认你的GridView的AllowPaging属性已经设为True(从你的ASPX代码看已经加了,这点没问题)
  • 如果用的是ObjectDataSource,记得开启它的EnablePaging属性,并且指定SelectCountMethod(获取总记录数的方法)

内容的提问来源于stack exchange,提问作者Nils

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:10:57