더북(TheBook)

9. 리스트 페이지의 코드 숨김 파일은 다음과 같이 작성한다.

▼  ~/DotNetNote/BoardList.aspx.cs

using DotNetNote.Models;
using System;
using System.Web.UI;

namespace MemoEngine.DotNetNote
{
  public partial class BoardList : System.Web.UI.Page
  {
      // 공통 속성: 검색 모드: 검색 모드이면 true, 그렇지 않으면 false.
      // [참고] 이러한 공통 속성들은 Base 클래스에 모아 넣고 상속해줘도 좋음
      public bool SearchMode { get; set; } = false;
      public string SearchField { get; set; }
      public string SearchQuery { get; set; }
      
      public int PageIndex = 0; // 현재 보여줄 페이지 번호
      public int RecordCount = 0; // 총 레코드 개수(글번호 순서 정렬용)
      
      private NoteRepository _repository;
      public BoardList()
      {
          _repository = new NoteRepository();
      }
      
      protected void Page_Load(object sender, EventArgs e)
      {
          // 검색 모드 결정
          SearchMode =
          (!string.IsNullOrEmpty(Request.QueryString[“SearchField”]) &&
              !string.IsNullOrEmpty(Request.QueryString[“SearchQuery”]));
          if (SearchMode)
          {
              SearchField = Request.QueryString[“SearchField”];
              SearchQuery = Request.QueryString[“SearchQuery”];
          }
          
          // 쿼리스트링에 따른 페이지 보여주기
          if (Request[“Page”] != null)
          {
              // Page는 보여지는 쪽은 1, 2, 3, … 코드단에서는 0, 1, 2, …
              PageIndex = Convert.ToInt32(Request[“Page”]) - 1;
          }
          else
          {
              PageIndex = 0; // 1페이지
          }
          
          // 쿠키를 사용한 리스트 페이지 번호 유지 적용:
          // 100번째 페이지의 글 보고, 다시 리스트 왔을 때 100번째 페이지 표시
          if (Request.Cookies[“DotNetNote”] != null)
          {
              if (!String.IsNullOrEmpty(
                  Request.Cookies[“DotNetNote”][“PageNum”]))
              {
                  PageIndex = Convert.ToInt32(
                      Request.Cookies[“DotNetNote”][“PageNum”]);
              }
              else
              {
                  PageIndex = 0;
              }
          }
          
          // 레코드 카운트 출력
          if (SearchMode == false)
          {
              // Notes 테이블의 전체 레코드
              RecordCount =
                  _repository.GetCountAll();
          }
          else
          {
              // Notes 테이블 중 SearchField+SearchQuery에 해당하는 레코드 수
              RecordCount =
                  _repository.GetCountBySearch(SearchField, SearchQuery);
         }
          lblTotalRecord.Text = RecordCount.ToString();
          
          // 페이징 처리
          AdvancedPagingSingleWithBootstrap.PageIndex = PageIndex;
          AdvancedPagingSingleWithBootstrap.RecordCount = RecordCount;
          
          if (!Page.IsPostBack)
          {
             DisplayData();
          }
      }
      
      private void DisplayData()
      {
          if (SearchMode == false) // 기본 리스트
          {
              ctlBoardList.DataSource = _repository.GetAll(PageIndex);
          }
          else // 검색 결과 리스트
          {
              ctlBoardList.DataSource = _repository.GetSeachAll(
                  PageIndex, SearchField, SearchQuery);
          }
          
          ctlBoardList.DataBind();
      }
  }
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.