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

.NET7 DevExpress Grid服务端分页实现指导及问题排查

DevExpress Grid + .NET7 服务端分页实现指南及问题排查

常见问题排查

  • 未启用服务端绑定模式:DevExpress Grid默认采用客户端分页,需显式配置自定义绑定路由指定分页处理逻辑,否则分页操作会在本地内存中执行。
  • 分页参数未正确传递:未从Grid的请求中获取PageIndex、PageSize等参数,导致后端分页逻辑无效。
  • 过早执行ToList():若先调用ToList()将数据加载到内存再分页,本质仍是客户端分页,必须在IQueryable层面完成分页后再执行数据库查询。
  • 总记录数未返回:Grid需要总条数来生成分页控件,需单独查询总记录数,不能用分页后的集合计数。

实现步骤及示例

1. Razor页面Grid配置

@page "/data-grid"
@model DataGridPageModel
@{
    var grid = Html.DevExpress().GridView(settings => {
        settings.Name = "dataGrid";
        // 指定回调路由
        settings.CallbackRouteValues = new { Page = "/data-grid" };
        // 绑定服务端分页处理方法
        settings.CustomBindingRouteValuesCollection.Add(GridViewOperationNames.Paging, "GetPagedData");
        
        // 配置列(根据你的实体调整)
        settings.Columns.Add("Id");
        settings.Columns.Add("ProductName");
        settings.Columns.Add("Price");
        
        // 启用分页器
        settings.SettingsPager.Mode = GridViewPagerMode.ShowPager;
        settings.SettingsPager.PageSize = 15;
        settings.Settings.ShowFilterRow = true;
    });
}

@grid.BindToCustomData(Model.GridData).GetHtml()

2. Razor Pages PageModel代码

using DevExpress.Web.Mvc;
using Microsoft.EntityFrameworkCore;

public class DataGridPageModel : PageModel
{
    private readonly AppDbContext _dbContext;

    public DataGridPageModel(AppDbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public GridViewCustomBindingData GridData { get; set; }

    public async Task OnGet()
    {
        // 初始化第一页数据
        GridData = await GetPagedDataAsync(new GridViewPagerState { PageIndex = 0, PageSize = 15 });
    }

    public async Task<IActionResult> OnGetGetPagedData(GridViewPagerState pager)
    {
        int pageIndex = pager.PageIndex;
        int pageSize = pager.PageSize;

        // 保持查询为IQueryable,避免提前加载数据
        var query = _dbContext.Products.AsQueryable();

        // 计算总记录数(分页前执行)
        int totalCount = await query.CountAsync();

        // 执行分页查询
        var pagedData = await query
            .Skip(pageIndex * pageSize)
            .Take(pageSize)
            .ToListAsync();

        // 返回Grid所需的分页数据结构
        var result = new GridViewCustomBindingGetDataResult
        {
            Data = pagedData,
            TotalRowCount = totalCount
        };

        return PartialView("_GridPartial", result);
    }
}

3. 关键注意事项

  • 所有筛选、排序逻辑需在Skip()/Take()之前通过IQueryable完成,确保操作被转换为SQL语句在数据库端执行。
  • 确认使用的DevExpress版本兼容.NET7,建议升级到v22.2及以上版本。
  • 若分页控件仍不显示,检查TotalRowCount是否正确传递,以及SettingsPager.Mode是否设置为ShowPager。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:43:09