개발관련/asp.net

게시판 페이징 구현

길동무92 2012. 12. 24. 17:37

NOT IN 메소드

==================================================================================

SELECT TOP [가져올 레코드 수] seq, thread, 컬럼A, 컬럼B, … FROM 테이블
WHERE b_id NOT IN
(SELECT Top [건너뛸 레코드 수] thread FROM 테이블 ORDER BY thread DESC)
ORDER BY b_id DESC

==================================================================================

public int CurPage;
public int PageSize = 10;
public int b_id;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
CurPage = 1;
}

if (Request.QueryString["page"] != null)
{
CurPage = int.Parse(Request.QueryString["page"]);
}
}

private void Listing(int CurPage)
{
DBConn conn = new DBConn();

conn.Open();

//현재페이지 -1 만큼의 게시물을 제외한 후 거기서 부터 select (페이지 수에 따라 게시물 스킵)
GridView1.DataSource = conn.ExecuteDataTable("select top " + PageSize

+ " * from brd_cont where b_id not in (select top "

+ PageSize * (CurPage - 1) + " b_id from brd_cont order by parent "

+ "desc, level) order by parent desc,level", "brd_cont");
GridView1.DataBind();
conn.Close();
}

private void ShowBrdList()
{
DBConn conn = new DBConn();

conn.Open();

int TotalRecord = (int)conn.ExecuteScalar("select count(*) from brd_cont");

conn.Close();

int TotalPage = ((TotalRecord - 1) / PageSize) + 1;

Label1.Text = "page [" + CurPage.ToString() + "/" + TotalPage.ToString() + "] Total : "

+ TotalRecord.ToString();


ShowPager(TotalRecord, CurPage, TotalPage, PageSize);

Listing(CurPage);
}

private void ShowPager(int TotalRecord, int CurPage, int TotalPage, int PageSize)
{
string Path = Request.ServerVariables["PATH_INFO"].ToString() + "?page=";

//FromPage 페이지 네비게이션 시작 페이지 번호
//Curpage 페이지 네비게이션 마지막 페이지 번호
int FromPage, ToPage;

FromPage = (int)((CurPage - 1) / PageSize) * PageSize + 1;
if (TotalPage > FromPage + 9)
{
ToPage = FromPage + 9;
}
else ToPage = TotalPage;

string Pager = "";
int i;

//이전 10개 표시
if ((int)((CurPage - 1) / 10) > 0)
{
Pager = Pager + "<a href='" + Path + (FromPage - 1).ToString() + "'>{preq}</a>...";
}

//페이지 네비게이션 표시
for (i = FromPage; i <= ToPage; i++)
{
if (i == CurPage)
{
Pager += "<b>[" + i.ToString() + "]</b>";
}
else
{
Pager = Pager + "<a href='" + Path + i.ToString() + "'>" + "[" + i.ToString() + "]</a>";
}
}

//다음 10개 표시
if (ToPage < TotalPage)
{
Pager = Pager + "...<a href='" + Path + (ToPage + 1).ToString() + "'>{next}</a>";
}

//페이지 네비게이션 출력하기
Label2.Text = Pager;

if (CurPage > 1)
HyperLink2.NavigateUrl = Path + (CurPage - 1).ToString();
if (CurPage < ToPage)
HyperLink1.NavigateUrl = Path + (CurPage + 1).ToString();
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
}


protected void GridView1_PreRender(object sender, EventArgs e)
{
ShowBrdList();
}