Поскольку объем данных, возвращаемых запросом, велик, более 100 000 фрагментов данных, функцию запроса страницы необходимо оптимизировать. Откажитесь от практики использования DataGrid в исходной программе и напишите модуль постраничного отображения самостоятельно.
Сначала добавьте на страницу несколько DIV:
<div id="div_trackpoint" style=" border:solid 1px серый; высота:230px; ширина:99%; overflow-y:auto;">Используется для отображения данных, возвращаемых запросом</div>
<div id="div_trackpages" style="height:15px; width:99%; font-size:8pt; word-break:break-all; word-wrap:break-word;">Номер страницы, используемый для отображения постраничного просмотра< /div><br />
<div id="div_trackpagetab" style=" высота:15 пикселей; ширина:99%; размер шрифта:8pt; text-align:center;">Используется для отображения предыдущей страницы, следующей страницы,..., домашней страницы, Последняя страница и другие кнопки управления</div>
<div id="div_trackpage_status" style="height:20px; width:99%; font-size:8pt; text-align:center;">Используется для отображения номера текущей страницы</div>
реализует клиент пейджинговая функция:
var CurPage=0 //Текущая страница
var TotalPage=0 //Общее количество страниц
var PageTab=7 //Количество страниц, отображаемых в каждой группе
var CurTab=0 //Текущая группировка
Моя программа настроена на отображение 50 фрагментов данных на странице и 7 страниц на группу. Их можно настроить по мере необходимости.
Функция TurnTab используется для переключения групп и расчета, какую группу страниц отображать на основе переданного значения. val=1 означает переход к следующей группе, val=-1 означает переход к предыдущей группе, 0 означает переход к первой группе и -2 означает переход к последней группе. Пользователи переключают группы, щелкая символ ... на странице.
функция TurnTab(val)
{
вар nPage = 0;
если (значение == 1) {
КурТаб++;
nPage = (CurTab - 1) * PageTab + 1;
}
иначе если (значение == -1) {
КурТаб--;
nPage = (CurTab - 1) * PageTab + 1;
}
иначе, если (значение == 0) {
КурТаб = 1;
нПейдж = 1;
}
иначе если (значение == -2) {
CurTab = Math.floor(TotalPage/PageTab) + 1;
nPage = (CurTab - 1) * PageTab + 1;
}
var carinfo = document.getElementById("div_trackpages");
var tabinfo = document.getElementById("div_trackpagetab");
var strInner = "";
strInner += "<a href="javascript:TurnPage(1)">Домашняя страница</a> ";
strInner += "<a href="javascript:PreviousPage()">Предыдущая страница</a> ";
strInner += "Итого" + TotalPage + "Страница ";
strInner += "<a href="javascript:NextPage()">Следующая страница</a> ";
strInner += "<a href="javascript:TurnPage(" + TotalPage + ")">Последняя страница</a> ";
tabinfo.innerHTML = strInner;
стрИннер = "";
if (CurTab > 1) strInner += "<a href="javascript:TurnTab(-1)">...</a> ";
for ( ; nPage<=CurTab*PageTab; nPage++) {
если (nPage <= TotalPage) {
strInner += "<a href="javascript:TurnPage("+ nPage + ")">"+nPage+"</a> "
}
}
if (nPage < TotalPage) strInner += "<a href="javascript:TurnTab(1)">...</a> ";
carinfo.innerHTML = strInner;
}
Функция TurnPage используется для переключения страниц, val представляет количество страниц, на которые нужно переключиться, а диапазон запроса генерируется на основе количества отображаемых страниц, например, запрос первых 50 записей, записей от 51 до 100, а записи со 101 по 150. . .
cscCustomAnalyst — это функция асинхронного вызова, код реализации функции будет опубликован ниже. «Метод», «SID», «TIME1», «TIME2», «ROW1», «ROW2» — это все параметры, необходимые для выполнения запроса. Метод используется для определения того, какой запрос выполнить, «ROW1», «ROW2» означает. Диапазон запрашиваемых записей и другие параметры можно настроить в соответствии с фактическими потребностями. ShowCarTrack(val) — функция, обрабатывающая результаты запроса. Результаты, полученные после завершения асинхронного вызова, будут проанализированы, обработаны и отображены в этой функции. Эта часть кода написана под конкретную реализацию, поэтому приводить ее здесь не буду.
функция TurnPage(val)
{
if (Number(val) != CurPage) {
CurPage = Число (значение);
var row1 = String((CurPage - 1) * 50 + 1);
вар row2 = String (CurPage * 50);
var trackinfo = document.getElementById("div_trackpoint");
trackinfo.innerHTML = "Получение данных, подождите...";
_cscCustomAnalyst(["Метод", "SID", "TIME1", "TIME2", "ROW1", "ROW2"],
["GetCarTrack",, "80100117", t1, t2, row1, row2],
ShowCarTrack, onQueryError);
если (CurPage == 1) TurnTab(0);
если (CurPage == TotalPage) TurnTab(-2);
var statusinfo = document.getElementById("div_trackpage_status");
statusinfo.innerHTML = "Страница" + CurPage + "Страница";
}
}
NextPage переключается на следующую страницу и вызывает TurnPage для ее реализации. Если следующая страница превышает текущую группу, она должна переключиться на следующую группу.
функцияСледующаяСтраница()
{
если (CurPage < TotalPage) {
TurnPage(CurPage+1);
if ((CurPage + 1) > (CurTab * PageTab)) {
Вкладка TurnTab(1);
}
}
}
Предыдущая страница переключается на предыдущую страницу и вызывает TurnPage для ее реализации. Если предыдущая страница превышает текущую группу, она должна переключиться на предыдущую группу.
функция ПредыдущаяСтраница()
{
если (CurPage > 1) {
TurnPage (CurPage-1);
if ((CurPage - 1) <= ((CurTab - 1) * PageTab)) {
TurnTab(-1);
}
}
}
_cscCustomAnalyst — это функция асинхронного вызова, xhr.open("post","MapQuery.ashx", true); Этот абзац означает отправку запроса на страницу MapQuery.ashx. Все операции с базой данных сегмента сервера выполняются в MapQuery.ashx.
функция _cscCustomAnalyst (paramNames, paramValues, onComplete, onError) {
вар xhr=_GetXmlHttpRequest();
xhr.open("post","MapQuery.ashx", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange=функция(){
вар ReadyState = xhr.readyState;
если (readyState==4){
вар статус = xhr.status;
если (статус == 200) {
набор результатов вар = xhr.responseText;
если (набор результатов == ноль) {
onComplete (ноль);
возвращаться;
}
если(onComplete){
onComplete (набор результатов);
набор результатов = ноль;
}
}
еще{
если (ошибка) {
onError(xhr.responseText);
}
}
xhr.onreadystatechange = функция() {};
ххр = ноль;
}
};
вар paramString = null;
if(paramNames&¶mNames.length>0){
вар параметры = новый массив ();
while(paramNames&¶mNames.length>0)
{
params.push(paramNames.shift()+"="+_ToJSON(paramValues.shift()));
}
paramString = params.join("&");
}
xhr.send(paramString);
}
Наконец, перечислите оператор Oracle SQL, который выполняет запрос по диапазону количества: (запросить первые 50 записей)
ВЫБИРАТЬ *
FROM (SELECT /*+ FULL(tablename)*/ имя поля, ROWNUM rn FROM имя таблицы WHERE условие AND ROWNUM <= 50 ORDER BY поле DESC) t2 где t2.rn >= 1;