Dado que la cantidad de datos devueltos por la consulta es grande, más de 100.000 datos, es necesario optimizar la función de consulta de la página. Abandone la práctica de utilizar DataGrid en el programa original y escriba el módulo de visualización de paginación usted mismo.
Primero agregue algunos DIV a la página:
<div id="div_trackpoint" style=" border:solid 1px grey; height:230px; width:99%; overflow-y:auto;">Se utiliza para mostrar los datos devueltos por la consulta</div>
<div id="div_trackpages" style=" height:15px; width:99%; font-size:8pt; word-break:break-all; word-wrap: break-word;">Número de página utilizado para mostrar la paginación< /div><br />
<div id="div_trackpagetab" style=" height:15px; width:99%; font-size:8pt; text-align:center;">Se utiliza para mostrar la página anterior, la página siguiente,..., la página de inicio, Última página y otros botones de control</div>
<div id="div_trackpage_status" style=" height:20px; width:99%; font-size:8pt; text-align:center;">Se utiliza para mostrar el número de página de la página actual</div>
implementa el cliente función de paginación:
var CurPage=0; //Página actual
var TotalPage=0; //Número total de páginas
var PageTab=7; //El número de páginas mostradas en cada grupo
var CurTab=0; //Agrupación actual
Mi programa está configurado para mostrar 50 datos por página y 7 páginas por grupo. Estos se pueden ajustar según sea necesario.
La función TurnTab se utiliza para cambiar de grupo y calcular qué grupo de páginas mostrar en función del valor pasado. val = 1 significa cambiar al siguiente grupo, val = -1 significa cambiar al grupo anterior, 0 significa cambiar al primer grupo y -2 significa cambiar al último grupo. Los usuarios cambian de grupo haciendo clic en el símbolo ... en la página.
función TurnTab(val)
{
var nPágina = 0;
si (val == 1) {
CurTab++;
nPágina = (CurTab - 1) * PáginaTab + 1;
}
de lo contrario si (val == -1) {
CurTab--;
nPágina = (CurTab - 1) * PáginaTab + 1;
}
de lo contrario si (val == 0) {
CurTab = 1;
nPágina = 1;
}
de lo contrario si (val == -2) {
CurTab = Math.floor(TotalPage / PageTab) + 1;
nPágina = (CurTab - 1) * PáginaTab + 1;
}
var carinfo = document.getElementById("div_trackpages");
var tabinfo = document.getElementById("div_trackpagetab");
var strInner = "";
strInner += "<a href="javascript:TurnPage(1)">Página de inicio</a> ";
strInner += "<a href="javascript:PreviousPage()">Página anterior</a> ";
strInner += "Total" + TotalPage + "Página";
strInner += "<a href="javascript:NextPage()">Página siguiente</a> ";
strInner += "<a href="javascript:TurnPage(" + TotalPage + ")">Última página</a> ";
tabinfo.innerHTML = strInner;
strInner = "";
if (CurTab > 1) strInner += "<a href="javascript:TurnTab(-1)">...</a> ";
para (; nPágina<=CurTab*PáginaTab; nPágina++) {
if (nPágina <= PáginaTotal) {
strInner += "<a href="javascript:TurnPage("+ nPage + ")">"+nPage+"</a> "
}
}
if (nPage < TotalPage) strInner += "<a href="javascript:TurnTab(1)">...</a> ";
carinfo.innerHTML = strInner;
}
La función TurnPage se utiliza para cambiar de paginación, val representa el número de páginas a las que se cambiará y el rango de consulta se genera en función del número de páginas que se mostrarán, como consultar los primeros 50 registros, los registros del 51 al 100, y los registros del 101 al 150. . .
cscCustomAnalyst es una función de llamada asincrónica y el código para la implementación de la función se publicará a continuación. "Método", "SID", "TIME1", "TIME2", "ROW1", "ROW2" son todos parámetros necesarios para ejecutar la consulta. El método se utiliza para determinar qué consulta ejecutar, "ROW1", "ROW2" significa. El rango de registros a consultar y otros parámetros se pueden ajustar según las necesidades reales. ShowCarTrack (val) es una función que procesa los resultados de la consulta. Los resultados obtenidos después de que se complete la llamada asincrónica se analizarán, procesarán y mostrarán en esta función. Esta parte del código está escrita de acuerdo con una implementación específica, por lo que no la enumeraré aquí.
función TurnPage(val)
{
if (Número(val) != CurPage) {
PáginaCur = Número(val);
var fila1 = String((CurPage - 1) * 50 + 1);
var fila2 = Cadena(CurPage * 50);
var trackinfo = document.getElementById("div_trackpoint");
trackinfo.innerHTML = "Obteniendo datos, espere...";
_cscCustomAnalyst(["Método", "SID", "TIEMPO1", "TIEMPO2", "FILA1", "FILA2"],
["GetCarTrack", "80100117", t1, t2, fila1, fila2],
ShowCarTrack,onQueryError);
si (CurPage == 1) TurnTab(0);
if (CurPage == TotalPage) TurnTab(-2);
var statusinfo = document.getElementById("div_trackpage_status");
statusinfo.innerHTML = "Página" + CurPage + "Página";
}
}
NextPage cambia a la página siguiente y llama a TurnPage para implementarla. Si la página siguiente excede el grupo actual, debe cambiar al grupo siguiente.
funciónPáginaSiguiente()
{
if (PáginaCur <PáginaTotal) {
TurnPage(CurPágina+1);
if ((CurPage + 1) > (CurTab * PageTab)) {
GirarTab(1);
}
}
}
PreviousPage cambia a la página anterior y llama a TurnPage para implementarla. Si la página anterior excede el grupo actual, debe cambiar al grupo anterior.
función Página anterior()
{
if (CurPage > 1) {
TurnPage(CurPage-1);
if ((CurPage - 1) <= ((CurTab - 1) * PageTab)) {
GirarTab(-1);
}
}
}
_cscCustomAnalyst es una función de llamada asincrónica, xhr.open("post","MapQuery.ashx", true); este párrafo significa enviar la solicitud a la página MapQuery.ashx. Todas las operaciones de la base de datos del segmento del servidor se realizan en MapQuery.ashx.
función _cscCustomAnalyst(paramNames, paramValues, onComplete, onError){
var xhr=_GetXmlHttpRequest();
xhr.open("post","MapQuery.ashx", true);
xhr.setRequestHeader("Tipo de contenido", "aplicación/x-www-form-urlencoded");
xhr.onreadystatechange=función(){
var readyState=xhr.readyState;
si (estadolisto==4){
var estado=xhr.status;
si(estado==200){
var conjunto de resultados = xhr.responseText;
si(conjunto de resultados == nulo){
onComplete(nulo);
devolver;
}
si (en completo) {
onComplete(conjunto de resultados);
conjunto de resultados = nulo;
}
}
demás{
si(enError){
onError(xhr.responseText);
}
}
xhr.onreadystatechange = función(){};
xhr = nulo;
}
};
var paramString=null;
if(nombresparam&&nombresparam.longitud>0){
var parámetros = nueva matriz();
while(nombresparam&&nombresparam.longitud>0)
{
params.push(paramNames.shift()+"="+_ToJSON(paramValues.shift()));
}
paramString = params.join("&");
}
xhr.send(paramString);
};
Finalmente, enumere una declaración SQL de Oracle que consulte por rango de cantidad: (consulte los primeros 50 registros)
SELECCIONAR *
FROM (SELECT /*+ FULL(nombretabla)*/ nombrecampo, ROWNUM rn FROM nombretabla WHERE condición AND ROWNUM <= 50 ORDER BY campo DESC) t2 donde t2.rn >= 1;