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

MudTable多选仅选中当前显示行的实现方法咨询

MudTable实现当前页范围的全选功能

要实现仅选中当前显示页的行,需要覆盖MudTable默认的全选逻辑,自定义表头的全选复选框并绑定专属的选中处理逻辑,核心是利用MudTable提供的CurrentPageItems属性获取当前页的数据。

实现步骤与代码示例

  1. 自定义表头全选控件
    替换MudTable默认的全选复选框,手动添加MudCheckBox并绑定状态与事件:
<MudTable T="YourDataModel" 
          @bind-SelectedItems="_selectedItems" 
          MultiSelection="true" 
          @ref="_tableRef"
          RowsPerPageOptions="@(new int[]{10,25,50})">
    <HeaderTemplate>
        <!-- 自定义全选复选框 -->
        <MudCheckBox @bind-Checked="_isCurrentPageSelected" 
                     CheckedChanged="HandleCurrentPageSelectAll" 
                     Indeterminate="_isCurrentPagePartiallySelected" />
        <!-- 其他表头列 -->
        <MudTh>字段1</MudTh>
        <MudTh>字段2</MudTh>
    </HeaderTemplate>
    <RowTemplate>
        <MudTd DataLabel="字段1">@context.Field1</MudTd>
        <MudTd DataLabel="字段2">@context.Field2</MudTd>
    </RowTemplate>
</MudTable>
  1. 编写后端逻辑处理全选/取消全选
    通过_tableRef.CurrentPageItems获取当前页数据,维护选中项集合并同步全选框状态:
private List<YourDataModel> _selectedItems = new();
private MudTable<YourDataModel> _tableRef;
private bool _isCurrentPageSelected;

// 判断是否处于半选状态(当前页部分项被选中)
private bool _isCurrentPagePartiallySelected
{
    get
    {
        var currentPageItems = _tableRef.CurrentPageItems.ToList();
        int selectedCount = currentPageItems.Count(item => _selectedItems.Contains(item));
        return selectedCount > 0 && selectedCount < currentPageItems.Count;
    }
}

// 处理当前页全选/取消全选
private void HandleCurrentPageSelectAll(bool isChecked)
{
    var currentPageItems = _tableRef.CurrentPageItems.ToList();
    if (isChecked)
    {
        // 加入当前页未被选中的项
        foreach (var item in currentPageItems)
        {
            if (!_selectedItems.Contains(item))
                _selectedItems.Add(item);
        }
    }
    else
    {
        // 移除当前页已选中的项
        _selectedItems.RemoveAll(item => currentPageItems.Contains(item));
    }
    // 触发UI更新
    _selectedItems = new List<YourDataModel>(_selectedItems);
}

// 同步手动选行时的全选框状态
protected override void OnAfterRender(bool firstRender)
{
    if (!firstRender)
    {
        var currentPageItems = _tableRef.CurrentPageItems.ToList();
        _isCurrentPageSelected = currentPageItems.All(item => _selectedItems.Contains(item));
        StateHasChanged();
    }
}

关键说明

  • CurrentPageItems是MudTable内置属性,会自动跟随分页、搜索、排序操作更新,始终返回当前页面显示的所有数据项。
  • 全选框的Indeterminate属性用于处理"部分选中"的视觉状态,提升交互体验。
  • 通过重新赋值_selectedItems触发UI更新,确保选中状态实时同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:15:30