最初にページング クラスのソース コードを投稿し、その後、時間があるときにその使用方法と機能の拡張方法を説明するいくつかの例を投稿します。
クラスの元のコードは次のとおりです:
< %
'=============================================
'XDOWNPAGE ASP バージョン
'現在のバージョン: 2.0
'
'
'オリジナルバージョン1.00
'コード:zykj2000
'メール: [email protected]
'BBS: http://bbs.513soft.net
'
'
'アップグレードバージョン: 1.5 (asp + oracle)
2倍に更新されました
電子メール:
ブログ: ttp://blog.csdn.net/double/
'アップグレード手順:
'
'
「アップグレード バージョン: 2.0」 (asp + oracle) ---->現在のバージョン
'元の名前を保持します: XDOWNPAGE
ノーススノーによって更新されました
'メール: [email protected]
ブログ: http://blog.csdn.net/precipitant
'アップグレード手順:
'1、データをクエリするときは、現在のページに含まれるレコードのみがクエリされるため、データ送信量が大幅に削減されます。
'2、ページ ナビゲーションが正常であれば、最初にクエリを実行してからパラメーターを介して渡す限り、レコードの合計数を毎回クエリする必要はありません。
'3、ページ サイズの動的変更をサポート
'4、動的ソートをサポート
'5 では、このプログラムは oracle のみをサポートしています。sqlserver または他のタイプのデータベースで使用したい場合は、自分で変更してください: Public Property Let GetSQL(str_sql)。
'
'
'その他のプログラム修飾子情報については、ソース コードで確認してください。 ! !
「このプログラムは自由に使用、変更、コピー、複製、引用することができます。私のプログラムがあなたの仕事に利便性をもたらすことを願っています。」
ただし、上記の情報、特に元の情報は保管しておいてください。なお、商用利用する場合は、オリジナル作品と本バージョンをバージョンアップしてください。
「許可を得るための連絡。
'
'
'プログラムの特徴
'このプログラムは主にデータ ページング部分をカプセル化しており、データ表示部分はユーザーによって完全にカスタマイズされます。
'複数の URL パラメータをサポート
'
「使用説明書」
'プログラムパラメータの説明
'PapgeSize はページングの各ページのレコード数を定義します
'GetRS はページ分割された Recordset を返します。このプロパティは読み取り専用です。
'GetConn はデータベース接続を取得します
'GetSQL はクエリ ステートメントを取得します
'totalRecordCount はレコードの総数を渡します
' プログラム メソッドの説明
'ShowPage は、唯一のパブリック メソッドであるページング ナビゲーション バーを表示します。
'ShowPageSizeChange() は、変更されたページ サイズのリストを表示します
'
'例:
'
' 'インクルードファイル
'
'mypage=new xdownpageを設定します 'オブジェクトの作成
'mypage.getconn=conn 'データベース接続を取得します
' mypage.getsql="select * from productinfo order by ID asc"
' mypage.pagesize=5 '各ページのレコードデータを5に設定します
'mypage.totalRecordCount=rsTotalCount はレコードの総数を設定します
'set rs=mypage.getrs() 'レコードセットを返す
'mypage.GetSubmitForm="frmQuery" 'ページング用にデフォルトで送信されるフォーム、currentpage パラメータ
'Response.write(mypage.GetSubmitForm1()) 'ページング送信関数を出力
' mypage.showpage() ' ページング情報を表示します。このメソッドは set rs=mypage.getrs() の後に使用できます。
'どこでも通話可能、何度でも通話可能
' do while not rs.eof '次の操作は、通常の Recordset オブジェクトの操作と同じです。
' 応答.書き込み rs(0) & "
' " 'ここで表示方法をカスタマイズできます
次へ移動します
' ループ
'
'現在のページ番号を保存するための送信スクリプトを追加しました
'関数はGetSubmitForm()です
'関数 GetSubmitForm にフォーム名を送信する必要があります
'変数 flag、currentpage、pagesize、rsTotalCount の 4 つのパラメータをこの送信されたフォームに保存します
'例は次のとおりです
'フラグ=リクエスト("フラグ")
'currentpage=request("現在のページ")
'currentpage=request("ページサイズ")
'currentpage=request("rsTotalCount")
'送信されたフォームに次の 4 つの入力を追加します
'<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= "<font face=""webdings"">9</font>" '最初のページのボタンの表示スタイルを定義します
Const Btn_Prev="<font face=""webdings"">3</font>" '前ページ ボタンの表示スタイルを定義します
Const Btn_Next="<font face=""webdings"">4</font>" '次のページ ボタンの表示スタイルを定義します
Const Btn_Last="<font face=""webdings"">:</font>" '最終ページ ボタンの表示スタイルを定義します
Const XD_Align="center" 'ページング情報の配置を定義します
Const XD_Width="100%" 'ページング情報ボックスのサイズを定義します
Const XD_Height="20"
Class Xdownpage 'クラスはここから始まります
' 変数定義
public int_totalPage '総ページ数
public int_curcount '現在のページのレコード数
public XD_PageSize 'ページサイズ
Private int_curpage '現在のページ番号
Private int_totalRecord 'レコードの総数
プライベート XD_Conn 'データベース接続オブジェクト
Private XD_Rs 'レコードセットオブジェクト
プライベート XD_SQL 'メイン SQL ステートメント
Private XD_Count_SQL 'レコードの合計数をクエリする SQL ステートメント
プライベート Str_errors
プライベート str_URL
プライベート XD_sURL
Private SubmitForm '必須クエリフォーム名 (フォーム名を非表示)
'================================================ = ================
'PageSize プロパティ
'各ページのページサイズを設定します
'================================================ = ================
Public プロパティ Let PageSize(int_PageSize)
IsNumeric(Int_Pagesize) の場合
clng(Int_Pagesize)>0 の場合
XD_PageSize=CLng(int_PageSize)
それ以外
XD_ページサイズ=10
終了する場合
それ以外
XD_ページサイズ=10
終了の場合
End プロパティ
Public プロパティ Get PageSize
XD_PageSize="" または (not(IsNumeric(XD_PageSize))) の場合
ページサイズ=10
それ以外
PageSize=XD_PageSize
終了の場合
終了プロパティ
'================================================ = ================
'GetRS プロパティ
'ページ分割されたレコードセットを返します
'================================================ = ================
パブリック プロパティ Get GetRs()
Set 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="" or not 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 を設定します
終了プロパティ
'============================================== = =================
'クエリRSCountメソッド
'レコードの総数を問い合わせる
'================================================ = ================
パブリックサブクエリRsCount()
'次のコードはレコードの総数を計算するために使用されます
if XD_Count_SQL<>"" then
set 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=何も設定しない
終了する場合
エンドサブ
'============================================== = =================
'GetConn はデータベース接続を取得します
'
'================================================ = ===============
Public プロパティ Let GetConn(obj_Conn)
XD_Conn=obj_Conn を設定します
終了プロパティ
'============================================== = ================
'GetSQL はクエリ ステートメントを取得します
'
'================================================ = ===============
Public プロパティ Let GetSQL(str_sql)
if (str_sql<>"") then
'指定されたクエリ ステートメントに基づいて、最終的なクエリ ステートメントを生成します (現在のページのコンテンツのみを取得します): Oracle データベースに適しています
XD_SQL=" select * from (select rownum r_n,temptable.* from ("
XD_SQL=XD_SQL&str_sql
XD_SQL=XD_SQL&" ) temptable ) where r_n は " & cstr((int_curpage -1) * XD_PageSize +1) & " と " & cstr(int_curpage * XD_PageSize) の間です。
'レコードの総数を問い合わせるクエリ文
XD_Count_SQL="("& str_sql & ") から count(*) を選択"
終了する場合
終了プロパティ
'================================================ = ===============
'GetSubmitForm プロパティはクエリ条件のフォームを設定します
'
'================================================ = ===============
Public プロパティ Let GetSubmitForm(frmName)
SubmitForm=trim(frmName)
終了プロパティ
'============================================== = ================
'GetSubmitForm1 メソッドはページング ナビゲーションに必要なスクリプトを出力します
'
'================================================ = ===============
パブリックサブ GetSubmitForm1()
'ページナビゲーションのJavaScript機能
Response.Write " "+vrcrlf
Response.Write ("<Script language=""javascript"">") +vbcrlf
Response.Write " function generalSubmit(i)"+vbcrlf
Response.Write " {"+vbcrlf
Response.Write " document."&SubmitForm&".flag.value=""query1111111155555"";"+vbcrlf
Response.Write " document."&SubmitForm&".currentpage.value=i;"+vbcrlf
Response.Write " "&SubmitForm&".submit();"+vbcrlf
Response.Write " }"+vbcrlf
'ページサイズを変更するJavaScript関数
Response.Write " functionchangePageSize(ii)"+vbcrlf
Response.Write " {"+vbcrlf
Response.Write " document."&SubmitForm&".flag.value=""query1111111155555"";"+vbcrlf
Response.Write " document."&SubmitForm&".currentpage.value=1;"+vbcrlf
Response.Write " document."&SubmitForm&".pagesize.value=ii;"+vbcrlf
Response.Write " "&SubmitForm&".submit();"+vbcrlf
Response.Write " }"+vbcrlf
Response.Write ("</Script>")+vbcrlf
Response.Write " "+vrcrlf
エンドサブ
'============================================== = ===================
'totalRecordCount プロパティ
'総レコード数について
'
'================================================ = =================
Public プロパティ 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 に設定します
'========================
' 現在の値を取得します
'========================
Request("currentpage")="" の場合
int_curpage=1
ElseIf not(IsNumeric(Request("currentpage"))) then
int_curpage=1
ElseIf CInt(Trim(Request("currentpage")))<1 then
int_curpage=1
それ以外
Int_curpage=CInt(Trim(Request("currentpage")))
End If
End Sub
'============================================= =
'ShowPage はページング ナビゲーション バーを作成します
'ホームページ、前ページ、次ページ、最後のページ、デジタルナビゲーションがあります
'
'=============================================
パブリックサブ ShowPage()
ディム str_tmp
XD_sURL = GetUrl()
' int_totalRecord=XD_Rs.RecordCount
int_totalRecord<=0 の場合
str_error=str_error & "レコードの総数はゼロです。データを入力してください。"
ShowError() を呼び出す
終了の場合
int_totalRecord="" の場合、
int_TotalPage=1
Else
'modify by 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 Int_curpage>int_Totalpage then
int_curpage=int_TotalPage
End If
'=============================================== ========
'ページング情報を表示します。各モジュールは独自の要件に従って表示位置を変更します
'================================================ = =======
'応答。「」を書き込みます
str_tmp=ShowFirstPrv
応答.書き込み str_tmp
str_tmp=showNumBtn
応答.書き込み str_tmp
str_tmp=次の最後を表示
応答.書き込み str_tmp
str_tmp=ページ情報の表示
応答.書き込み str_tmp
Response.write " "
ShowGoto
End Sub
'=============================================
'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) then
開始ページ=1
終了する場合
if (int_curpage>5) then
start_page=int_curpage-2
終了する場合
終了する場合
終了ページ=開始ページ+5
if end_page>int_totalpage then
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
ディミンティ
if int_totalPage<=0 then
response.write "<select name='goto' 無効>"
Response.Write "<option value='0'>0</option>"
応答.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) の場合
応答.書き込み「選択済み」
終了する場合
応答.write" >"&inti&"</option>"
次
応答.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 & " selected "
str_tmp=str_tmp & " value='10'>10</option>"
str_tmp=str_tmp & "<オプション"
XD_PageSize=20 の場合、str_tmp =str_tmp & " selected "
str_tmp=str_tmp & " value='20'>20</option>"
str_tmp=str_tmp & "<オプション"
XD_PageSize=50 の場合、str_tmp =str_tmp & " selected "
str_tmp=str_tmp & " value='50'>50</option>"
str_tmp=str_tmp & "<オプション"
if XD_PageSize=int_totalRecord then str_tmp =str_tmp & " selected "
str_tmp=str_tmp & " value='" & int_totalRecord & ''>all</option>"
str_tmp=str_tmp & "</select>"
応答.str_tmp を書き込みます
エンドサブ
'=============================================
'現在の URL パラメータを取得するように関数を変更しました
Redsunによるコーディング
'northsnow コメント: どこで使用するかわかりませんが、保管しておいてください
'=============================================
プライベート関数 GetUrl()
Dim ScriptAddress、M_ItemUrl、M_item
ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))&"?" '現在のアドレスを取得します
If (Request.QueryString <> "") then
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 = ScriptAddress '& "page="
終了機能
'=============================================
'終了イベントを設定します。
'=============================================
プライベートサブクラス_Terminate
'XD_RS.close
'XD_RS=何も設定しない
エンドサブ
'=============================================
'ShowError エラー メッセージ
'=============================================
プライベートサブ ShowError()
str_Error <> "" の場合
Response.Write("" & SW_Error & "")
応答.終了
終了の場合
End Sub
エンドクラス
%>