BzPagination

صفحه بندی

پیمایش بین صفحه ها، با کنترل تعداد دکمه های اطراف.

صفحه بندی ساده

فقط bind-Page و TotalPages لازم است.

صفحه: 1 / 12

razor
@using BzCore.Components.Overlay

<BzPagination @bind-Page="_page" TotalPages="12" />

<p>صفحه: @_page / 12</p>

@code {
    private int _page = 1;
}
پارامتر Sibling

Sibling تعیین میکنه هر طرف صفحه ی فعلی چند دکمه دیده شود. عدد بزرگ تر یعنی دکمه های بیشتر و نقطه چین کمتر.

Sibling = 1
Sibling = 2

هر دو به یک متغیر وصل اند — صفحه: 5

پارامتر پیش فرض توضیح
Page1صفحه ی فعلی (با bind-Page)
TotalPages1تعداد کل صفحه ها
Sibling1تعداد دکمه ی هر طرف صفحه ی فعلی
PageChangedرویداد تغییر صفحه
razor
@using BzCore.Components.Overlay

@* Sibling = how many buttons show on each side of the current page *@
<BzPagination @bind-Page="_page" TotalPages="20" Sibling="1" />
<BzPagination @bind-Page="_page" TotalPages="20" Sibling="2" />

@code {
    private int _page = 5;
}
صفحه بندی روی دیتا واقعی

الگوی همیشگی: Skip/Take روی منبع داده با استفاده از صفحه ی فعلی.

Row #1
Row #2
Row #3
Row #4
razor
@using BzCore.Components.Overlay

@foreach (var item in PagedItems)
{
    <div>@item</div>
}

<BzPagination @bind-Page="_page" TotalPages="@TotalPages" />

@code {
    private int _page = 1;
    private const int PageSize = 4;

    private readonly List<string> _all =
        Enumerable.Range(1, 23).Select(i => $"Row #{i}").ToList();

    private int TotalPages => (int)Math.Ceiling(_all.Count / (double)PageSize);

    private IEnumerable<string> PagedItems =>
        _all.Skip((_page - 1) * PageSize).Take(PageSize);
}

@*
For EF Core, page on the server instead:

    var total = await db.Orders.CountAsync();
    var rows  = await db.Orders
                        .OrderBy(o => o.Id)
                        .Skip((_page - 1) * PageSize)
                        .Take(PageSize)
                        .ToListAsync();
*@