نظرا لأن كمية البيانات التي يتم إرجاعها بواسطة الاستعلام كبيرة، أكثر من 100000 قطعة من البيانات، فإن وظيفة استعلام الصفحة تحتاج إلى تحسين. تخلى عن ممارسة استخدام DataGrid في البرنامج الأصلي واكتب وحدة عرض الترحيل بنفسك.
قم أولاً بإضافة بعض عناصر DIV إلى الصفحة:
ينفذ العميل وظيفة الترحيل:
var CurPage=0;//الصفحة الحالية
var TotalPage=0; // إجمالي عدد الصفحات
var PageTab=7; // عدد الصفحات المعروضة في كل مجموعة
var CurTab=0;//التجميع الحالي
تم إعداد برنامجي لعرض 50 جزءًا من البيانات لكل صفحة و7 صفحات لكل مجموعة، ويمكن تعديلها حسب الحاجة.
يتم استخدام وظيفة TurnTab للتبديل بين المجموعات وحساب مجموعة الصفحات التي سيتم عرضها بناءً على القيمة التي تم تمريرها. val=1 يعني التبديل إلى المجموعة التالية، val=-1 يعني التبديل إلى المجموعة السابقة، 0 يعني التبديل إلى المجموعة الأولى، و-2 يعني التبديل إلى المجموعة الأخيرة. يقوم المستخدمون بتبديل المجموعات من خلال النقر على الرمز ... الموجود على الصفحة.
وظيفة TurnTab (فال)
{
فار nPage = 0;
إذا (فال == 1) {
CurTab++;
nPage = (CurTab - 1) * PageTab + 1;
}
وإلا إذا (فال == -1) {
CurTab--;
nPage = (CurTab - 1) * PageTab + 1;
}
وإلا إذا (فال == 0) {
CurTab = 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 += "الصفحة الرئيسية ";
strInner += "الصفحة السابقة ";
strInner += "Total" + TotalPage + "Page ";
strInner += "الصفحة التالية ";
strInner += "الصفحة الأخيرة ";
tabinfo.innerHTML = strInner;
strInner = "";
if (CurTab > 1) strInner += "... ";
لـ ( ; nPage<=CurTab*PageTab; nPage++) {
إذا (nPage <= TotalPage) {
strInner += ""+nPage+" "
}
}
if (nPage < TotalPage) strInner += "... ";
carinfo.innerHTML = strInner;
}
يتم استخدام وظيفة TurnPage لتبديل الترحيل، وتمثل val عدد الصفحات التي سيتم التبديل إليها، ويتم إنشاء نطاق الاستعلام بناءً على عدد الصفحات التي سيتم عرضها، مثل الاستعلام عن أول 50 سجلاً، والسجلات من 51 إلى 100، والسجلات من 101 إلى 150. . .
cscCustomAnalyst هي وظيفة استدعاء غير متزامنة، وسيتم نشر التعليمات البرمجية لتنفيذ الوظيفة أدناه. "Method"، "SID"، "TIME1"، "TIME2"، "ROW1"، "ROW2" كلها معلمات مطلوبة لتنفيذ الاستعلام يمكن تعديل نطاق السجلات المطلوب الاستعلام عنها والمعلمات الأخرى وفقًا للاحتياجات الفعلية. ShowCarTrack(val) هي وظيفة تعالج نتائج الاستعلام وسيتم تحليل النتائج التي تم الحصول عليها بعد اكتمال المكالمة غير المتزامنة ومعالجتها وعرضها في هذه الوظيفة. تمت كتابة هذا الجزء من الكود وفقًا للتنفيذ المحدد، لذا لن أدرجه هنا.
وظيفة TurnPage (فال)
{
إذا (رقم (فال) ! = CurPage) {
CurPage = Number(val);
varrow1 = String((CurPage - 1) * 50 + 1);
varrow2 = String(CurPage * 50);
var Trackinfo = document.getElementById("div_trackpoint");
Trackinfo.innerHTML = "جارٍ الحصول على البيانات، برجاء الانتظار...";
_cscCustomAnalyst(["Method"، "SID"، "TIME1"، "TIME2"، "ROW1"، "ROW2"]،
["GetCarTrack"،، "80100117"، t1، t2،row1،row2]،
ShowCarTrack,onQueryError);
if (CurPage == 1) TurnTab(0);
if (CurPage == TotalPage) TurnTab(-2);
var Statusinfo = document.getElementById("div_trackpage_status");
Statusinfo.innerHTML = "الصفحة" + CurPage + "الصفحة"؛
}
}
يقوم NextPage بالتبديل إلى الصفحة التالية ويستدعي TurnPage لتنفيذه. إذا تجاوزت الصفحة التالية المجموعة الحالية، فيجب التبديل إلى المجموعة التالية.
وظيفةالصفحة التالية ()
{
إذا (كورباج <إجمالي بيج) {
TurnPage(CurPage+1);
إذا ((CurPage + 1)> (CurTab * PageTab)) {
TurnTab(1);
}
}
}
تتحول الصفحة السابقة إلى الصفحة السابقة وتستدعي TurnPage لتنفيذها. إذا تجاوزت الصفحة السابقة المجموعة الحالية، فيجب التبديل إلى المجموعة السابقة.
وظيفة الصفحة السابقة ()
{
إذا (CurPage > 1) {
TurnPage(CurPage-1);
إذا ((CurPage - 1) <= ((CurTab - 1) * PageTab)) {
TurnTab(-1);
}
}
}
_cscCustomAnalyst هي وظيفة استدعاء غير متزامنة، xhr.open("post"،"MapQuery.ashx"، true)؛ تعني هذه الفقرة إرسال الطلب إلى صفحة MapQuery.ashx. يتم تنفيذ جميع عمليات قاعدة بيانات جزء الخادم في MapQuery.ashx.
الدالة _cscCustomAnalyst(paramNames, paramValues, onComplete, onError){
var xhr=_GetXmlHttpRequest();
xhr.open("post"،"MapQuery.ashx"، true
xhr.setRequestHeader("Content-Type"، "application/x-www-form-urlencoded");
xhr.onreadystatechange=function(){
var ReadyState=xhr.readyState;
إذا (حالة الاستعداد==4){
فار الحالة=xhr.status;
إذا (الحالة == 200) {
فار resultset = xhr.responseText;
إذا (مجموعة النتائج == فارغة){
onComplete(null);
يعود؛
}
إذا (اكتمل) {
onComplete(resultset);
resultset = null;
}
}
آخر{
إذا (أونرور) {
onError(xhr.responseText);
}
}
xhr.onreadystatechange = function(){};
xhr = null;
}
};
var paramString=null;
إذا(paramNames&¶mNames.length>0){
var params = new Array();
بينما (paramNames&¶mNames.length>0)
{
params.push(paramNames.shift()+"="+_ToJSON(paramValues.shift()));
}
paramString = params.join("&");
}
xhr.send(paramString);
};
وأخيرًا، قم بإدراج عبارة Oracle SQL التي تستعلم حسب نطاق الكمية: (الاستعلام عن أول 50 سجلًا)
يختار *
FROM (SELECT /*+ FULL(tablename)*/ fieldname, ROWNUM rn FROM tablename WHERE condition AND ROWNUM <= 50 ORDER BY field DESC) t2 حيث t2.rn >= 1;