问题描述
我需要你的帮助。
当前,我的查询返回了超过 2000条记录,在通过存储过程从sql server中获取记录后,我将它们发送到了表中(我使用了DataTables库1.10.19 )当它开始形成表格并进行相应的分页时,问题在于,要花费超过 30秒或更多的时间才能显示表格中的内容,我该如何做才能使其仅显示用户看到的结果(每页 10条记录),并计算如果用户前进到下一条记录并将以下10条记录带给我,则该页将具有的其他页数或该页的显示方式?。
这是我的代码:
控制器:
public JsonResult Get_Pacientes(int IdEstatus)
{
List<Paciente> l = new List<Paciente>(Get_RowsPac(IdEstatus));
var jsonResult = Json(new { success = true,lcontenedor= l},JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
** JavaScript:**
function ObtieneListaEmp(id) {
$('#fader').css('display','block');
var EnviaDatos =
{
//"e.CVE_EMPLEADO": $('#NOMINA').val(),"IdEstatus": id,};
$.ajax({
url: '../Empleado/EmpleadosXEstatus',contentType: 'application/json; charset=utf-8',type: 'POST',dataType: 'json',data: JSON.stringify(EnviaDatos),success: function (response) {
$('#fader').css('display','none');
if (response.success) {
AgregaTablaEmpPactest(); //this function adds the table header
var data = [];
data = response.lcontenedor;
setTimeout(function () {
//aqui va la tarea
$('#tbl').DataTable({
data: data,deferRender: true,"columns": [
//{ "data": "CLAVE_AFILIACION" },{ // render //clave afilacion
"data": function (data,type,row,Meta) {
return "<a href=\"#\" onclick='LlamaRegistro(" + '"' + data.CLAVE_AFILIACION + '"' + ")'>" + data.CLAVE_AFILIACION + "</a>";
}
},{ "data": "NOMINA" },{
data: null,render: function (data,row) {
return row.NOMBRE + ' ' + row.APELLIDO_PAT + ' ' + row.APELLIDO_MAT;
}
},{ "data": "TELEFONO_CASA" },{ "data": "CELULAR" },{ "data": "SECRETARIA" },{ "data": "DIRECCION" },{ "data": "PUESTO" },{ "data": "EDAD" },{ "data": "OBSERVACION" },{ "data": "FECHA_SEG" },{ "data": "DESC_ESTATUS_EVO" },{ "data": "FECHA_PRUEBA" },{ "data": "FECHA_RESULTADO" },{ "data": "LUGAR_DE_EXP" },{ "data": "DESC_ESTATUS_PRU" },{ "data": "FECHAINICIO_INC" },{ "data": "DIASINCAPACIDAD_INC" },{ "data": "FECHAFIN_INC" },//{ "data": "FECHAFIN_INC" },{ // render IMPRIMIR
"data": function (data,Meta) {
return "<button type=\"button\" class=\"btn btn-secondary fa fa-print C_Imprimir\">";
}
},],"columnDefs": [
{
"targets": [3],"visible": false,"searchable": false
},{
"targets": [4],"searchable": false
}
],dom: 'Bfrtip',buttons: [
//'copy','csv','excel',{
extend: 'pdf',orientation: 'landscape',pageSize: 'LEgal'
},{
extend: 'print'//,//messagetop: 'Lista de Empleados RegisTrados' + response.lOrdenesTrabajo[0].NOMBRE_PROV,text: 'Imprimir'
}
],"order": [7,'desc'],//ordernar por fecha de menor a mayor
"language": {
"scrollX": true,"sProcessing": "Procesando...","sLengthMenu": "Mostrar _MENU_ registros","sZeroRecords": "No se encontraron resultados","sEmptyTable": "Ningún dato disponible en esta tabla","sInfo": "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros","sInfoEmpty": "Mostrando registros del 0 al 0 de un total de 0 registros","sInfoFiltered": "(filTrado de un total de _MAX_ registros)","sInfoPostFix": "","sSearch": "Buscar:","sUrl": "","sInfoThousands": ",","sLoadingRecords": "Cargando...","oPaginate": {
"sFirst": "Primero","sLast": "Último","sNext": "Siguiente","sPrevIoUs": "Anterior"
},"oAria": {
"sSortAscending": ": Activar para ordenar la columna de manera ascendente","sSortDescending": ": Activar para ordenar la columna de manera descendente"
}
}
});
},50);
//AgregaTablaEmpPac(response.lcontenedor);
}
else {
alert(response.responseText);
}
},error: function (xhr) {
$('#fader').css('display','none');
alert('Ocurrio un Error Inesperado.' + $('#Datos_ID_FechaIn').val());
}
})
};
解决方法
我有一个相同的问题,我使用这种类型的代码来发送所需的记录数:
[DataContract]
public class Course
{
[DataMember] public string[] UrlsCourse;
[DataMember] public string BackgroundImage;
[DataMember] public string KeyWords;
[DataMember] public string TitleCourse;
[DataMember] public string[] stats;
[DataMember] public string description;
public Course(string[] urlsCourse,string backgroundImage,string keyWords,string titleCourse,string[] stats,string description)
{
UrlsCourse = urlsCourse;
BackgroundImage = backgroundImage;
KeyWords = keyWords;
TitleCourse = titleCourse;
this.stats = stats;
this.description = description;
}
}
[DataContract]
public class SearchCourses
{
[DataMember] public readonly int maxRecords;
[DataMember] public int maxRecordsPerPage;
[DataMember] public int currentRecord;
[DataMember] public int currentPage;
[DataMember] public int maxPages;
[DataMember] public int[] minmax;
[DataMember] public int maxRecordsSent;
[DataMember] public int currentmaxLinks;
[DataMember] public Course[] currentDatas;
[DataMember] public string[] categories;
public Course[] search;
public string[] courses;
public int maxLinks;
public SearchCourses(string[] courses,int maxRecordsPerPage = 10,int currentPage = 1,int currentRecord = 0,int maxLinks = 9)
{
this.currentPage = currentPage;
this.maxRecordsPerPage = maxRecordsPerPage;
this.currentRecord = currentRecord;
this.courses = courses;
this.maxRecords = courses.Length;
this.maxLinks = maxLinks;
this.search = courses.Select(r => getRecord(r.Split(new string[] { "\r\n" },StringSplitOptions.None))).ToArray();
categories = this.search.Select(c => c.KeyWords.Split('-')[0].Trim()).Distinct().ToArray();
currentDatas = search.Take(maxRecordsPerPage).ToArray();
maxRecordsSent = maxRecords;
maxPages = maxRecordsSent / maxRecordsPerPage + 1;
this.currentPage = 1;
maxPages = maxRecordsSent / maxRecordsPerPage + 1;
currentmaxLinks = maxLinks > maxPages ? maxPages : maxLinks;
minmax = new int[] { 1,currentmaxLinks };
}
public string GetJSON()
{
string json;
using (var ms = new MemoryStream())
{
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(SearchCourses));
js.WriteObject(ms,this);
ms.Position = 0;
using (var sr = new StreamReader(ms))
{
json = sr.ReadToEnd();
}
}
return json;
}
它的服务器提供了不同的课程列表,因此我将最后的搜索保留在“搜索”中,而只是在currentDatas中发送所需的数据,(我只序列化currentDatas而不使用GetJSON()方法对搜索进行序列化。)>
我有一个带有页数的书签...等等。
我管理显示最大页面数的书签(这里我有9个链接书签),我管理下一页和上一页的按钮..依此类推。