먼저 페이징 클래스의 소스 코드를 게시한 다음, 시간이 나면 사용법과 기능 확장 방법을 설명하기 위해 몇 가지 예제를 게시하겠습니다.
클래스의 원래 코드는 다음과 같습니다.
< %
'==============================================
'XDOWNPAGE ASP 버전
'현재 버전: 2.0
'
'
'원래 버전 1.00
'zykj2000의 코드
'이메일: [email protected]
'BBS: http://bbs.513soft.net
'
'
'업그레이드 버전: 1.5(asp + oracle)
두 배로 업데이트됨
이메일:
블로그: ttp://blog.csdn.net/double/
'업그레이드 지침:
'
'
'업그레이드 버전: 2.0' (asp + oracle) ---->현재 버전
'원래 이름 유지: XDOWNPAGE
Northsnow에 의해 업데이트됨
'이메일: [email protected]
'블로그: http://blog.csdn.net/precipitant
'업그레이드 지침:
'1, 데이터 조회 시 현재 페이지에 포함된 레코드만 조회하므로 데이터 전송량이 대폭 줄어듭니다.
'2, 페이지 탐색이 정상적인 경우 처음으로 쿼리한 후 매개변수를 통해 전달하기만 하면 매번 총 레코드 수를 쿼리할 필요가 없습니다.
'3, 동적으로 변경되는 페이지 크기 지원
'4, 동적 정렬 지원
'5, 이 프로그램은 oracle만 지원합니다. sqlserver 또는 다른 유형의 데이터베이스에서 사용하려면 직접 수정하십시오. Public Property Let GetSQL(str_sql).
'
'
'기타 프로그램 수정자 정보는 소스코드에서 확인해주세요! ! !
'이 프로그램은 무료로 사용, 수정, 복사, 복제, 인용이 가능합니다. 제가 만든 프로그램이 귀하의 업무에 편리함을 가져다 줄 수 있기를 바랍니다.
'그러나 위의 정보, 특히 원본 정보를 유지하십시오. 또한, 상업적인 목적으로 사용하실 경우에는 원본 저작물과 본 버전으로 업그레이드 해주시기 바랍니다.
'허가를 위해 연락하세요.
'
'
'프로그램 기능
'이 프로그램은 주로 데이터 페이징 부분을 캡슐화하고 데이터 표시 부분은 사용자가 완전히 사용자 정의합니다.
'다중 URL 매개변수 지원
'
'사용 지침
'프로그램 매개변수 설명
'PapgeSize는 각 페이징 페이지의 레코드 수를 정의합니다.
'GetRS는 페이지가 매겨진 레코드세트를 반환합니다. 이 속성은 읽기 전용입니다.
'GetConn이 데이터베이스 연결을 얻습니다.
'GetSQL이 쿼리 문을 가져옵니다.
'totalRecordCount는 총 레코드 수를 전달합니다.
' 프로그램 방법 설명
'ShowPage는 유일한 공개 메서드인 페이징 탐색 모음을 표시합니다.
'ShowPageSizeChange()는 변경된 페이지 크기 목록을 표시합니다.
'
'예:
'
' '파일 포함
'
'Set mypage=new xdownpage' 객체 생성
'mypage.getconn=conn'데이터베이스 연결 가져오기
' mypage.getsql="id asc로 productinfo 주문에서 * 선택"
' mypage.pagesize=5 '각 페이지의 레코드 데이터를 5로 설정
'mypage.totalRecordCount=rsTotalCount는 총 레코드 수를 설정합니다.
'set rs=mypage.getrs() '레코드세트 반환
'mypage.GetSubmitForm="frmQuery" '페이징을 위해 기본적으로 제출되는 양식, currentpage 매개변수
'Response.write(mypage.GetSubmitForm1()) '출력 페이징 제출 기능
' mypage.showpage() '페이징 정보를 표시합니다. 이 메서드는 rs=mypage.getrs()를 설정한 후에 사용할 수 있습니다.
'어디서나 전화, 여러 번 전화 가능
' do while not rs.eof '다음 작업은 일반 Recordset 개체를 작업하는 것과 동일합니다.
' response.write rs(0) & "
' " '여기서 표시 방법을 사용자 정의할 수 있습니다.
다음으로 이동하세요.
' 루프
'
'현재 페이지 번호를 저장하기 위한 제출 스크립트가 추가되었습니다.
'함수는 GetSubmitForm()입니다.
'GetSubmitForm 함수에 양식 이름을 제출해야 합니다.
'이 제출된 양식에 flag, currentpage, pagesize, rsTotalCount 변수의 네 가지 매개변수를 저장합니다.
'예제는 다음과 같다
'플래그=요청("플래그")
'현재페이지=request("현재페이지")
'현재페이지=요청("페이지 크기")
'currentpage=request("rsTotalCount")
'제출된 양식에 다음 네 가지 입력을 추가합니다.
'<input name="flag" type="hidden" value="< % =flag% >">
'<input name="currentpage" type="hidden" value="< % =currentpage% >">">
'<input name="pagesize" type="hidden" value="< % =pagesize% >">
'<input name="rsTotalCount" type="hidden" value="< % =rsTotalCount% >">
'=============================================
Const Btn_First= "<fontface=""webdings"">9</font>" '첫 번째 페이지의 버튼 표시 스타일 정의
Const Btn_Prev="<fontface=""webdings"">3</font>" '이전 페이지 버튼 표시 스타일 정의
Const Btn_Next="<fontface=""webdings"">4</font>" '다음 페이지 버튼 표시 스타일 정의
Const Btn_Last="<font Face=""webdings"">:</font>" '마지막 페이지 버튼 표시 스타일 정의
Const XD_Align="center" '페이징 정보 정렬 정의
Const XD_Width="100%" '페이징 정보 상자의 크기를 정의합니다.
상수 XD_Height="20"
클래스 Xdownpage '여기에서 클래스가 시작됩니다
' 변수 정의
public int_totalPage '총 페이지 수
public int_curcount '현재 페이지의 레코드 수
공개 XD_PageSize '페이지 크기
Private int_curpage '현재 페이지 번호
Private int_totalRecord '총 레코드 수
Private XD_Conn '데이터베이스 연결 개체
Private XD_Rs '레코드 세트 개체
Private XD_SQL '기본 SQL 문
Private XD_Count_SQL '총 레코드 수를 쿼리하는 SQL 문
비공개 Str_errors
비공개 str_URL
비공개 XD_sURL
Private SubmitForm '필수 쿼리 양식 이름(양식 이름 숨기기)
'================================================ = ================
'페이지 크기 속성
'각 페이지의 페이징 크기를 설정
'================================================ = ================
공용 속성 Let PageSize(int_PageSize)
IsNumeric(Int_Pagesize)이면
clng(Int_Pagesize)>0이면
XD_PageSize=CLng(int_PageSize)
또 다른
XD_페이지 크기=10
종료하면
또 다른
XD_페이지 크기=10
종료 조건
End 속성
Public 속성 PageSize 가져오기
XD_PageSize="" 또는 (not(IsNumeric(XD_PageSize))) 인 경우
페이지 크기=10
또 다른
페이지 크기=XD_PageSize
종료 조건
끝 속성
'================================================ = ================
'GetRS 속성
'페이지가 매겨진 레코드세트를 반환합니다.
'================================================ = ================
공용 속성 GetRs() 가져오기
XD_Rs=Server.createobject("adodb.recordset") 설정
'XD_Rs.PageSize=페이지 크기
XD_Rs.CursorLocation=3
XD_Rs.Open XD_SQL,XD_Conn,3,1
int_curcount=XD_Rs.RecordCount
if int_totalRecord="" isNumeric(int_totalRecord) then int_totalRecord=0 'int_totalRecord의 값을 정규화합니다.
int_totalRecord=0이고 (int_curcount>=PageSize 또는 int_curpage>1)인 경우 queryRsCount()를 호출합니다. '총 레코드 수를 쿼리합니다.
err.number<>0이면
응답.쓰기 오류.지우기
종료하면
GetRs=XD_RS로 설정
끝 속성
'============================================== = =================
'queryRSCount 메소드
'총 레코드 개수를 조회합니다.
'================================================ = ================
공개 하위 쿼리RsCount()
'다음 코드는 총 레코드 수를 계산하는 데 사용됩니다.
XD_Count_SQL<>""인 경우
rs_sqlcount=server.createobject("adodb.recordset")를 설정합니다.
rs_sqlcount.CursorLocation=3
rs_sqlcount.open XD_Count_SQL,conn,3,1
if (rs_sqlcount.eof 및 rs_sqlcount.bof) then
int_totalRecord=0
또 다른
int_totalRecord=rs_sqlcount(0)
int_totalRecord=clng(int_totalRecord)
종료하면
rs_sqlcount.close
rs_sqlcount=nothing을 설정합니다.
종료하면
하위 끝
'============================================== = ==================
'GetConn이 데이터베이스 연결을 얻습니다.
'
'================================================ = ===============
공용 속성 Let GetConn(obj_Conn)
XD_Conn=obj_Conn으로 설정
끝 속성
'============================================== = ================
'GetSQL이 쿼리 문을 가져옵니다.
'
'================================================ = ===============
공용 속성 Let GetSQL(str_sql)
if (str_sql<>"") 그렇다면
'주어진 쿼리문을 기반으로 최종 쿼리문을 생성합니다(현재 페이지의 내용만 가져옴): Oracle 데이터베이스에 적합
XD_SQL=" select * from (rownum r_n,temptable.* from (" 선택)
XD_SQL=XD_SQL&str_sql
XD_SQL=XD_SQL&" ) temptable ) 여기서 r_n은 " & cstr((int_curpage -1) * XD_PageSize +1) & " 및 " & cstr(int_curpage * XD_PageSize) 사이에 있습니다.
'총 레코드 개수를 조회하는 쿼리문
XD_Count_SQL="("& str_sql & ")"에서 개수(*) 선택"
종료하면
끝 속성
'================================================ = ===============
'GetSubmitForm 속성은 쿼리 조건에 대한 양식을 설정합니다.
'
'================================================ = ===============
공용 속성 Let GetSubmitForm(frmName)
SubmitForm=trim(frmName)
끝 속성
'============================================== = ================
'GetSubmitForm1 메소드는 페이징 탐색에 필요한 스크립트를 출력합니다.
'
'================================================ = ===============
공개 서브 GetSubmitForm1()
'페이지 탐색의 자바스크립트 기능
응답.쓰기 " "+vrcrlf
Response.Write("<스크립트 언어=""javascript"">") +vbcrlf
Response.Write " function GeneralSubmit(i)"+vbcrlf
응답.쓰기 " {"+vbcrlf
Response.Write " 문서."&SubmitForm&".flag.value=""query1111111155555"";"+vbcrlf
Response.Write " 문서."&SubmitForm&".currentpage.value=i;"+vbcrlf
응답.쓰기 " "&SubmitForm&".submit();"+vbcrlf
응답.쓰기 " }"+vbcrlf
'페이지 크기를 변경하는 자바스크립트 함수
Response.Write " functionchangePageSize(ii)"+vbcrlf
응답.쓰기 " {"+vbcrlf
Response.Write " 문서."&SubmitForm&".flag.value=""query1111111155555"";"+vbcrlf
Response.Write " 문서."&SubmitForm&".currentpage.value=1;"+vbcrlf
Response.Write " 문서."&SubmitForm&".pagesize.value=ii;"+vbcrlf
Response.Write " "&SubmitForm&".submit();"+vbcrlf
응답.Write " }"+vbcrlf
응답.쓰기("</Script>")+vbcrlf
응답.쓰기 " "+vrcrlf
끝 하위
'============================================== = ====================
'totalRecordCount 속성
'총 레코드 수에 대해
'
'================================================ = =================
공용 속성 Let totalRecordCount(int_totalRecordCount)
IsNumeric(int_totalRecordCount)이면
int_totalRecord=CLng(int_totalRecordCount)
종료 조건
End 속성
Public 속성 Get totalRecordCount
그렇지 않은 경우(int_totalRecord="" 또는 (not(IsNumeric(int_totalRecord))))
totalRecordCount=int_totalRecord
종료 조건
끝 속성
'================================================ = ==================
'GetRecordCount 메소드
'현재 레코드 수를 반환합니다.
'
'================================================ = ==================
공개 함수 GetRecordCount()
GetRecordCount=int_totalRecord
함수 종료
'================================================ = ==================
'Class_Initialize 클래스 초기화
'현재 페이지의 값을 초기화합니다.
'
'================================================ = ==================
비공개 하위 클래스_초기화
'========================
'일부 매개변수에 대한 기본값 설정
'========================
' XD_PageSize=10 '페이징 기본값을 10으로 설정합니다.
'========================
'현재 값을 가져옵니다.
'========================
요청("현재 페이지")=""인 경우
int_curpage=1
ElseIf not(IsNumeric(Request("현재 페이지"))) Then
int_curpage=1
ElseIf CInt(Trim(Request("현재 페이지")))<1 Then
int_curpage=1
또 다른
Int_curpage=CInt(Trim(요청("현재 페이지")))
End If
End Sub
'============================================ =
'ShowPage는 페이징 탐색 표시줄을 생성합니다.
'홈페이지, 이전 페이지, 다음 페이지, 마지막 페이지, 디지털 내비게이션이 있습니다.
'
'==============================================
공개 서브 쇼페이지()
희미한 str_tmp
XD_sURL = GetUrl()
' int_totalRecord=XD_Rs.RecordCount
int_totalRecord<=0인 경우
str_error=str_error & "총 레코드 수가 0입니다. 데이터를 입력하세요"
ShowError() 호출
종료 조건
int_totalRecord=""인 경우
int_TotalPage=1
Else
'수정: wls 041215 올바른 페이지 표시를 위해---------------
int_totalRecord mod PageSize =0인 경우
int_TotalPage = CLng(int_TotalRecord XD_PageSize * -1) *-1
또 다른
int_TotalPage = CLng(int_TotalRecord XD_PageSize * -1)*-1+1
End If
End If
If Int_curpage>int_Totalpage Then
int_curpage=int_TotalPage
종료하면
'================================================ ========
'페이징 정보 표시, 각 모듈은 자체 요구 사항에 따라 디스플레이 위치를 변경합니다.
'================================================ = =======
'응답.쓰기 " "
str_tmp=ShowFirstPrv
response.write str_tmp
str_tmp=showNumBtn
response.write str_tmp
str_tmp=다음마지막 표시
response.write str_tmp
str_tmp=ShowPageInfo
response.write str_tmp
응답." " 쓰기
ShowGoto
종료 하위
'==============================================
'ShowFirstPrv는 홈페이지와 이전 페이지를 표시합니다.
'
'
'==============================================
개인 함수 ShowFirstPrv()
Dim Str_tmp,int_prvpage
int_curpage=1인 경우
str_tmp=Btn_First&" "&Btn_Prev
Elseif int_curpage=0이면
str_tmp=Btn_First&" "&Btn_Prev
또 다른
int_prvpage=int_curpage-1
str_tmp="<a href=""#"" onclick=""javascript:generalSubmit('1')"" alt=""첫 페이지"">" & Btn_First&"</a> <a href="" # "" onclick=""javascript:generalSubmit('"&int_prvpage&"')"" alt=""이전 페이지"">" & Btn_Prev&"</a>"
종료 조건
ShowFirstPrv=str_tmp
함수 종료
'==============================================
'ShowNextLast 다음 페이지, 마지막 페이지
'
'
'==============================================
개인 함수 ShowNextLast()
Dim str_tmp,int_Nextpage
If Int_curpage>=int_totalpage Then
str_tmp=Btn_Next & " " & Btn_Last
또 다른
Int_NextPage=int_curpage+1
str_tmp="<a href=""#"" onclick=""javascript:generalSubmit('"&int_nextpage&"')"" alt=""Nextpage"">" & Btn_Next&"</a> <a href= "" #"" onclick=""javascript:generalSubmit('"&int_totalpage&"')"" alt=""마지막 페이지"">" & Btn_Last&"</a>"
종료 조건
ShowNextLast=str_tmp
함수 종료
'함수 종료
'==============================================
'ShowNumBtn 수정된 숫자 탐색
'
'==============================================
함수 showNumBtn()
Dim i,str_tmp,end_page,start_page
start_page=1
'sll 2005.05.20 int_curpage=0으로 추가
int_curpage=0이면
str_tmp=str_tmp&"0"
또 다른
int_curpage>1이면
start_page=int_curpage
if (int_curpage<=5) 그러면
start_page=1
종료하면
(int_curpage>5) 그렇다면
start_page=int_curpage-2
종료하면
종료하면
end_page=start_page+5
end_page>int_totalpage인 경우
end_page=int_totalpage
종료하면
i=start_page에서 end_page까지
strTemp=XD_sURL & CStr(i)
str_tmp=str_tmp & "[<a href=""#"" onclick=""javascript:generalSubmit('"&i&"')"">"&i&"</a>] "
다음
종료하면
showNumBtn=str_tmp
함수 종료
'==============================================
'ShowGoto 페이지 점프
'페이지가 자동으로 이동합니다.
'sll로 추가 2005.05.20
'==============================================
개인 함수 ShowGoto()
'response.write int_totalPage
디민티
int_totalPage<=0이면
response.write "<select name='goto' 비활성화됨>"
응답.쓰기 "<옵션 값='0'>0</option>"
response.write "</select>"
else
response.write "<select name='goto' onchange='javascript:generalSubmit(this.value)'>"
for inti=1 to int_totalPage
Response.Write "<option value='"&inti&"'"
cstr(inti)=cstr(int_curpage)이면
response.write "선택됨"
종료하면
response.write" >"&inti&"</option>"
다음
response.write "</select>"
종료하면
기능 종료
'==============================================
'ShowPageInfo 페이징 정보
'필요에 따라 수정
'
'==============================================
개인 함수 ShowPageInfo()
희미한 str_tmp
str_tmp=" [페이지:<font color=red>"&int_curpage&"</font>/"&int_totalpage&"] [총 "&int_totalrecord&" 항목] ["&XD_PageSize&" 항목/페이지]"
ShowPageInfo=str_tmp
기능 종료
'==============================================
'ShowPageSizeChange는 페이지 크기를 변경합니다.
'필요에 따라 수정
'
'==============================================
공개 하위 ShowPageSizeChange()
희미한 str_tmp
str_tmp="페이지 크기: <select name='sssssPageSize' onchange='changePageSize(this.value)'>"
str_tmp=str_tmp & "<옵션"
XD_PageSize=10이면 str_tmp =str_tmp & "선택됨"
str_tmp=str_tmp & "값='10'>10</option>"
str_tmp=str_tmp & "<옵션"
XD_PageSize=20이면 str_tmp =str_tmp & "선택됨"
str_tmp=str_tmp & " value='20'>20</option>"
str_tmp=str_tmp & "<옵션"
XD_PageSize=50이면 str_tmp =str_tmp & " 선택 "
str_tmp=str_tmp & " value='50'>50</option>"
str_tmp=str_tmp & "<옵션"
XD_PageSize=int_totalRecord이면 str_tmp =str_tmp & "선택됨"
str_tmp=str_tmp & " value='" & int_totalRecord & "'>모두</option>"
str_tmp=str_tmp & "</select>"
응답.str_tmp 쓰기
하위 끝
'==============================================
'현재 Url 매개변수를 가져오기 위해 수정된 함수
'Redsun의 코딩'
'northsnow 댓글: 어디에 쓸지는 모르겠지만, 보관하세요
'==============================================
개인 함수 GetUrl()
희미한 스크립트 주소, M_ItemUrl, M_item
ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))&"?" '현재 주소를 가져옵니다.
If (Request.QueryString <> "") 그러면
M_ItemUrl = ""
Request.QueryString의 각 M_item에 대해
InStr("page",M_Item)=0이면
M_ItemUrl = M_ItemUrl & M_Item &"="& Server.URLEncode(Request.QueryString(""&M_Item&"")) & "&"
종료 조건
다음
ScriptAddress = ScriptAddress & M_ItemUrl '매개변수로 주소 가져오기
종료 조건
GetUrl = 스크립트 주소 '& "page="
기능 종료
'==============================================
'종료 이벤트를 설정합니다.
'==============================================
비공개 하위 클래스_종료
'XD_RS.닫기
'XD_RS=아무것도 설정하지 않음
서브 끝
'==============================================
'ShowError 오류 메시지
'==============================================
비공개 서브 ShowError()
만약 str_Error <> "" 그러면
Response.Write("" & SW_Error & "")
응답.종료
종료 조건
End Sub
End 클래스
%>