Blazor通用数据表格通过@typeparam TItem实现泛型,接收IReadOnlyList数据并用RenderFragment自定义行渲染;支持分页、排序(含嵌套属性)、搜索(多字段模糊匹配);提供声明式与模板化列配置;暴露OnRowClick等事件及IsLoading状态。
Blazor 里实现通用数据表格,核心是用 @typeparam TItem 声明泛型参数,让组件能接收任意类型的数据集合。组件接收 IReadOnlyList
通用表格常需分页和筛选。可添加如下参数:
Data.Skip((CurrentPage - 1) * PageSize).Take(PageSize) 截取数据OrderBy/OrderByDescending 动态排序,用 Expression> 或字符串字段名 + System.Linq.Dynamic.Core 库实现(推荐后者,简洁且支持嵌套属性如 "User.Name")Contains 模糊匹配,支持多字段联合搜索
为兼顾灵活性和易用性,可提供两种列定义方式:
组件,内部用表达式提取值并生成表头;支持 Sortable="true"、Filterable="true" 等开关操作 | ,完全由使用者控制内容表头点击触发排序时,自动切换方向并重新渲染;搜索框 debounce 防抖(比如 300ms),避免频繁重算。
组件应暴露关键交互事件,方便父组件响应:
EventCallback,点击某行时回调EventCallback,当前页变化时通知EventCallback
IsLoading 状态,配合 ... 显示加载中提示不强制要求服务端请求逻辑写在组件内,保持它专注 UI 和状态协调——数据获取仍由父组件或独立 service 负责,符合 Blazor 的职责分离原则。
基本上就这些。不复杂但容易忽略的是:泛型约束(比如加 暂无数据where TItem : class)、空数据占位提示(@if (!Data?.Any()) { )、以及响应式断点下隐藏非关键列(用 CSS class 控制)。做好这几处,一个轻量、可复用、易扩展的 Blazor 数据表格就立住了。