Сначала я опубликую исходный код класса подкачки, а затем, когда у меня будет время, опубликую несколько примеров, объясняющих его использование и расширение его функций.
Исходный код класса выглядит следующим образом:
< %
'============================================
'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="выберите * из порядка информации о продукте по возрастанию идентификатора"
' 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) & "
' " 'Здесь вы можете настроить метод отображения
'rs.
' петля
'
'Добавлен скрипт отправки для сохранения текущего номера страницы
'Функция GetSubmitForm()
'Необходимо отправить имя формы в функцию GetSubmitForm
'Сохраните четыре параметра переменных: flag, currentpage, pagesize, rsTotalCount в этой отправленной форме.
'Пример следующий
'флаг=запрос("флаг")
'currentpage=request("текущая страница")
'currentpage=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= "<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%" 'Определить размер поля информации о подкачке
Конст XD_Height="20"
Class Xdownpage 'Класс начинается здесь
' определение переменной
public int_totalPage 'Общее количество страниц
public int_curcount 'Количество записей на текущей странице
public XD_PageSize 'Размер страницы
Private int_curpage 'Номер текущей страницы
Private int_totalRecord 'Общее количество записей
Private XD_Conn 'Объект подключения к базе данных
Private XD_Rs 'Объект набора записей
Частный основной оператор sql XD_SQL
Private XD_Count_SQL 'оператор SQL для запроса общего количества записей
Частное Str_errors
Частный str_URL
Частный XD_sURL
Private SubmitForm 'Обязательное имя формы запроса (скрыть имя формы)
'============================================== = ================
'Свойство PageSize
'Установить размер каждой страницы
'============================================== = ================
Открытое свойство Let PageSize(int_PageSize)
Если IsNumeric(Int_Pagesize) Тогда
если clng(Int_Pagesize)>0, то
XD_PageSize=CLng(int_PageSize)
еще
XD_PageSize=10
конец, если
Еще
XD_PageSize=10
Конец, если
Конечная собственность
Открытая собственность Получить размер страницы
Если XD_PageSize="" или (нет(IsNumeric(XD_PageSize))) Тогда
Размер страницы=10
Еще
PageSize=XD_PageSize
Конец, если
Конечная собственность
'============================================== = ================
'Получить свойство RS
'Вернуть набор записей с разбивкой на страницы
'============================================== = ================
Общественная собственность Получить 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() 'Запросите общее количество записей
если номер ошибки<>0, то
Ответ.Записать ошибку.Очистить
конец, если
Установите GetRs=XD_RS
Конечное свойство
'=========================================== = =================
'метод запросаRSCount
'Запросить общее количество записей
'============================================== = ================
Публичный подзапросRsCount()
'Следующий код используется для расчета общего количества записей
если XD_Count_SQL<>"" тогда
set rs_sqlcount=server.createobject("adodb.recordset")
rs_sqlcount.CursorLocation=3
rs_sqlcount.open XD_Count_SQL,conn,3,1
если (rs_sqlcount.eof и rs_sqlcount.bof), то
int_totalRecord=0
еще
int_totalRecord=rs_sqlcount(0)
int_totalRecord=clng(int_totalRecord)
конец, если
rs_sqlcount.close
установить rs_sqlcount=ничего
конец, если
Конец подзаголовка
'============================================ = =================
'GetConn получает соединение с базой данных
'
'============================================== = ===============
Открытая собственность Let GetConn(obj_Conn)
Установите XD_Conn=obj_Conn
Конечное свойство
'=========================================== = ================
'GetSQL получает оператор запроса
'
'============================================== = ===============
Открытая собственность Let GetSQL(str_sql)
если (str_sql<>""), то
'На основе данного оператора запроса сгенерируйте окончательный оператор запроса (используйте только содержимое текущей страницы): подходит для базы данных Oracle
XD_SQL=" выберите * из (выберите номер строки r_n,temptable.* из ("
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()
'Функция Javascript для навигации по страницам
Ответ.Напишите " "+vrcrlf
Response.Write ("<Script Language=""javascript"">") +vbcrlf
Response.Write "функция 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
Ответ. Напишите " }"+vbcrlf
'функция JavaScript для изменения размера страницы
Response.Write " функцияchangePageSize(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
Ответ.Напишите " "+vrcrlf
конец подпункта
'============================================ = ===================
'Свойство TotalRecordCount
'Об общем количестве записей
'
'============================================== = =================
Открытое свойство Let totalRecordCount(int_totalRecordCount)
Если IsNumeric(int_totalRecordCount) Тогда
int_totalRecord=CLng(int_totalRecordCount)
Конец, если
Конечное свойство Открытое
свойство Получить totalRecordCount
Если нет(int_totalRecord="" или (не(IsNumeric(int_totalRecord)))) Тогда
totalRecordCount=int_totalRecord
Конец, если
Конечная собственность
'============================================== = =================
'Метод GetRecordCount
'Вернем текущее количество записей
'
'============================================== = =================
публичная функция GetRecordCount()
GetRecordCount=int_totalRecord
конечная функция
'============================================== = =================
'Class_Initialize инициализация класса
'Инициализируем значение текущей страницы
'
'============================================== = =================
Частный подкласс_инициализировать
'=======================
'Установить значения по умолчанию для некоторых параметров
'=======================
' XD_PageSize=10 'Установить значение постраничного просмотра по умолчанию равное 10
'=======================
'Получить текущее значение
'=======================
Если Запрос("текущая страница")="" Тогда
int_curpage=1
ElseIf not(IsNumeric(Request("currentpage"))) Тогда
int_curpage=1
ElseIf CInt(Trim(Request("currentpage")))<1 Тогда
int_curpage=1
Еще
Int_curpage=CInt(Trim(Request("currentpage")))
End If
End Sub
'========================================== =
'ShowPage создает панель навигации по страницам
«Есть домашняя страница, предыдущая страница, следующая страница, последняя страница и цифровая навигация.
'
'============================================
Публичная дополнительная страница ShowPage()
Тусклый str_tmp
XD_sURL = ПолучитьUrl()
' int_totalRecord=XD_Rs.RecordCount
Если int_totalRecord<=0 Тогда
str_error=str_error & «Общее количество записей равно нулю, введите данные»
Вызовите ШоуОшибку().
Конец, если
Если 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
Конец, если
Конец, если
, если Int_curpage>int_Totalpage Тогда
int_curpage = int_TotalPage
End If
'=========================================== = ========
'Отображение пейджинговой информации, каждый модуль меняет положение отображения в соответствии со своими требованиями
'============================================== = =======
'response.write " "
str_tmp=ShowFirstPrv
ответ.пишите str_tmp
str_tmp=showNumBtn
ответ.пишите str_tmp
str_tmp=ПоказатьСледующийПоследний
ответ.пишите str_tmp
str_tmp=ShowPageInfo
ответ.пишите str_tmp
Response.write " "
ShowGoto
Конец подзаголовка
'============================================
'ShowFirstPrv отображает домашнюю и предыдущую страницы
'
'
'============================================
Частная функция ShowFirstPrv()
Dim Str_tmp,int_prvpage
Если int_curpage=1 Тогда
str_tmp=Btn_First&" "&Btn_Prev
Иначе, если 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
Если Int_curpage>=int_totalpage Тогда
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
если (int_curpage<=5), то
start_page=1
конец, если
если (int_curpage>5), то
start_page=int_curpage-2
конец, если
конец, если
end_page=start_page+5
если конечная_страница>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 20.05.2005
'============================================
Частная функция ShowGoto()
'response.write int_totalPage
Диминти
если int_totalPage<=0, то
response.write "<select name='goto' отключен>"
Response.Write "<option value='0'>0</option>"
ответ.напишите "</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>"
следующий
ответ.напишите "</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='ssssPageSize' onchange='changePageSize(this.value)'>"
str_tmp=str_tmp & "<опция"
если XD_PageSize=10, то str_tmp =str_tmp & «выбрано»
str_tmp=str_tmp & "value='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 & "'>all</option>"
str_tmp=str_tmp & "</select>"
ответ. Напишите str_tmp
Конец подзаголовка
'===========================================
'Измененная функция для получения текущих параметров URL
«Программирование от Redsun»
'комментарий Northsnow: не знаю, где его использовать, но сохраните
'============================================
Частная функция GetUrl()
Тусклый адрес сценария, M_ItemUrl, M_item
ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))&"?" 'Получить текущий адрес
Если (Request.QueryString <> "") Тогда
M_ItemUrl = ""
Для каждого M_item в Request.QueryString
Если InStr("страница",M_Item)=0 Тогда
M_ItemUrl = M_ItemUrl & M_Item &"="& Server.URLEncode(Request.QueryString(""&M_Item&"")) & "&"
Конец, если
Следующий
ScriptAddress = ScriptAddress & M_ItemUrl 'Получить адрес с параметрами
Конец, если
GetUrl = ScriptAddress '& "page="
Конечная функция
'============================================
'Установим событие Terminate.
'============================================
Частный подкласс_Terminate
'XD_RS.close
'Установить XD_RS=ничего
Конец субтитра
'============================================
'Сообщение об ошибке ShowError
'============================================
Частная подписка ShowError()
Если str_Error <> "" Тогда
Response.Write("" & SW_Error & "")
Ответ.Конец
Конец, если
Конец субконца
класса
%>