[Blazor] 동적 페이지 개수 구하기
- 웹 프로그래밍/Blazor
- 2022. 11. 6. 17:20
개요
- Blazor 에서 동적으로 페이지 개수(PageCount) 구하는 방법에 대해서 정리 진행합니다.
시나리오
- 현재 데이터베이스에서 Candidates 테이블에 총 9개의 Record 가 저장되어 있다고 가정합니다.
- 여기서 저는 한 페이지당, 3개의 데이터(PageSize = 3)를 보여준다고 하면 PageCount 는 3개의 데이터씩 총 9개의 Record 가 기록되어 있으니 PageCount 는 3이 됩니다.
- 여기서 만약, 소수로 떨어진다면 소수 값 그 이상의 값으로 무조건 반올림을 해 주어야지 정수 값으로 표현이 가능합니다.
- 위 시나리오 대로 동적으로 페이지 개수를 구하는 방법에 대한 로직을 작성 진행합니다.
동적 페이지 개수 구하는 로직
- 동적으로 페이지를 구하기 위한 C# 로직은 다음과 같습니다.
@code {
// 현재 페이지(컴포넌트) 에서 사용할 모델 또는 컬렉션
private Candidate[]? Candidates { get; set; }
/// <summary>
/// 페이지 사이즈 : 한 페이지에 몇 개의 레코드를 보여줄건지 결정
/// </summary>
public int PageSize { get; set; } = 3;
/// <summary>
/// 페이지 번호 : 현재 보여줄 페이지 번호: 1 페이지, 2 페이지 ..
/// </summary>
[Parameter]
public int? Page{ get; set; } // PageNumber
/// <summary>
/// 페이지 인덱스 : 현재 보여줄 페이지 번호의 인덱스(PageNumber - 1)
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 총 몇 개의 페이지가 만들어지는지 : Math.Ceiling(총 레코드 수 / 10 (한 페이지에서 보여줄))
/// </summary>
public int PageCount { get; set; }
/// <summary>
/// 레코드 카운트 : 현재 테이블에 몇 개의 레코드가 있는지 지정
/// </summary>
public int RecordCount { get; set; }
protected override async Task OnParametersSetAsync()
{
if (Page is null or < 1)
{
// 1 페이지로 URL
string url = "/Candidates/1";
NavigationManagerInjector.NavigateTo(url);
return;
}
PageIndex = Page.Value - 1;
using var context = _ContextFactory.CreateDbContext();
RecordCount = await context.Candidates.CountAsync();
PageCount = Convert.ToInt32(Math.Ceiling(RecordCount / (double)PageSize));
if(PageCount == 0)
{
PageCount = 1; // 데이터가 없으면 1 페이지로 초기화
}
if (Page > PageCount)
{
NavigationManagerInjector.NavigateTo($"/Candidates/{PageCount}");
return;
}
Candidates = await context.Candidates
.OrderBy(it => it.FirstName)
.Skip(PageIndex * PageSize) // Page Skip 지정
.Take(PageSize)
.ToArrayAsync();
}
}
- 쉽게 설명하여, 데이터베이스에서 저장되어 있는 전체 Record 수를
CountAsync
메서드를 통해 조회 하여RecordCount
속성에 저장합니다. - 그리고 RecordCount 값을 PageSize 로 나눕니다. 여기서 PageSize 는 본인이 한 페이지당 보여주고자 하는 Record 개수를 의미합니다.
- 보다 정교하게 값을 다루기 위해서, double 형 타입과 Math.Ceiling 함수를 사용하였습니다.
- 위와 같이 동적으로 본인이 보여주고자 하는 페이지 개수를 구할 수 있습니다.
728x90
'웹 프로그래밍 > Blazor' 카테고리의 다른 글
[Blazor] 상태 관리 라이브러리 (0) | 2022.11.09 |
---|---|
[Blazor] 페이저 버튼 구현 (0) | 2022.11.08 |
[Blazor] - 특정 페이지 ReDirection (0) | 2022.11.06 |
[Blazor] PagIndex 속성 추가 및 Skip 과 Take 메서드로 페이징 처리 (1) | 2022.11.06 |
[Blazor] 재사용 컴포넌트 만들기 (0) | 2022.11.02 |
이 글을 공유하기