masastack / MASA.Blazor

Blazor UI component library based on Material Design. Support Blazor Server, Blazor WebAssembly and MAUI Blazor.
https://docs.masastack.com/blazor/getting-started/installation
MIT License
1.12k stars 151 forks source link

如何在MDataTable中显示编号列? #1387

Open mookeview opened 11 months ago

mookeview commented 11 months ago

能否增加一个属性用于在表格首列显示行号,这个功能非常实用。现有条件下,如何变通实现?

mookeview commented 11 months ago

另外,点击行能否获取该行的行号?

capdiem commented 11 months ago

@mookeview 只有本地分页才需要吧?服务端分页下一页又是从数字1开始了。

mookeview commented 11 months ago

服务器获取的话通过页码可以计算出来吧发自我的 iPhone在 2023年6月25日,11:34,capdiem @.***> 写道: @mookeview 只有本地分页才需要吧?服务端分页下一页又是从数字1开始了。

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>

mookeview commented 11 months ago

在没有加入这个功能 之前,有没有其他方法能实现?

capdiem commented 11 months ago

@mookeview 基于使用改的,只把关键代码写下来了。

<MDataTable Headers="_headers"
            Items="_desserts"
            ItemsPerPage="5"
            @ref="_datatable"
            TItem="Dessert"
            Page="@_page"
            OnRowClick="OnRowClick"
            OnOptionsUpdate="OnOptionsUpdate">
    <ItemColContent>
        @{
            if (_row > _datatable.ComputedItems.Count())
            {
                _row = 1;
            }

            @if (context.Header.Value == "#")
            {
                <span>@(_row++ + (_page - 1) * 5)</span>
            }
            else
            {
                @context.Value
            }
        }
    </ItemColContent>
</MDataTable>

@code {
    private int _row = 1;
    private int _page = 1;
    private MDataTable<Dessert> _datatable = null!;

    private void OnOptionsUpdate(DataOptions options)
    {
        _page = options.Page;
        // _itemsPerPage = options.ItemsPerPage;  // Demo中写死了5
    }

    private void OnRowClick(DataTableRowMouseEventArgs<Dessert> e)
    {
        var row = _datatable.ComputedItems.ToList().IndexOf(e.Item) + 1;
    }

    private List<DataTableHeader<Dessert>> _headers = new List<DataTableHeader<Dessert>>
    {
        new()
        {
            Text = "#",
            Value = "#",
            Sortable = false
        },
        // other header
    }
}
capdiem commented 11 months ago

@mookeview 服务端分页没测试,估计是可以用的

mookeview commented 11 months ago

测试可用,原来这么简单,谢谢!但还是建议在新版本中加入一个可显示编号列的属性