Как загрузить огромное количество данных в сетку кендо

3

веб-метод:

   <WebMethod()>
   Public Shared Function Pcpacking() As IEnumerable(Of Packing)
   Dim db As New STOREEntities
   Return db.PC_PACKING_HISTORIES. _
   Where(Function(q) q.PACK_DATE > "1388/11/07"). _
   Select(Function(q) New Packing _
              With {.Packdate = q.PACK_DATE,
                    .Packserialnumber = q.PACK_SERIAL_NUMBER,
                    .Netweight = q.NET_WEIGHT,
                    .Packusername = q.PACK_USER_NAME}).ToList()
   End Function

script:

$(function () {
       $("#grid").kendoGrid({
           height: 200,
           columns: [
                { field: "Packserialnumber", width: "150px" },
               { field: "Netweight", width: "50px" },
               { field: "Packusername", width: "150px" },
               { field: "Packdate", width: "100px" }
           ],
           editable: false,
           dataSource: {
               schema: {
                   data: "d",
                   model: {
                       id: "Packserialnumber",
                       fields: {
                           Packserialnumber: { editable: false, nullable: true },
                           Netweight: { type: "number", validation: { required: true, min: 1} },
                           Packusername: { validation: { required: true} },
                           Packdate: { validation: { required: true} }
                       }
                   }
               },
               batch: false,
               transport: {
                   read: {
                       url: "Default.aspx/Pcpacking",
                       contentType: "application/json; charset=utf-8",
                       type: "POST"
                   }
               }
           }
       });
   });

с этим условием (PACK_DATE > "1388/11/07" 366 записей) все работает хорошо. Но когда я меняю дату на 1388/11/06 1260 записей или 1388/11/05 5460 записей или... возникает следующая ошибка:

{ "Сообщение": "Ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение установленного в свойстве maxJsonLength.", "StackTrace": "at System.Web.Script.Serialization.JavaScriptSerializer. Сериализация (Object obj, вывод StringBuilder, SerializationFormat serializationFormat)\г\п     в System.Web.Script.Serialization.JavaScriptSerializer.Serialize(объект OBJ,      SerializationFormat serializationFormat)\r\n        в System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext контекст,         Метод WebServiceMethodDataData, IDictionary`2 rawParams)\r\n
         в System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext контекст, метод WebServiceMethodData methodData)",           "ExceptionType": "System.InvalidOperationException" }

Я думаю, что кендо-сетка не поддерживает огромные данные. Все предложения?
извините за мой плохой английский.

Показать ещё 1 комментарий
Теги:
kendo-ui

2 ответа

2
Лучший ответ

Проблема заключается в том, что по умолчанию сериализатор .NET JSON генерирует исключение, если результирующая строка JSON больше 100 кБ. Очевидно, что отправка тысяч записей превышает лимит. Вы можете изменить этот параметр, но я бы не рекомендовал его для вашего приложения.

Вместо этого настройте сетку для запроса небольших фрагментов данных за раз. Похоже, вы можете настроить Kendo Grid для загрузки большего количества данных при прокрутке.

$("#grid").kendoGrid({
    dataSource: {
        type: "odata",
        serverPaging: true,
        serverSorting: true,
        pageSize: 100,
        transport: {
            read: {
                url: "Default.aspx/Pcpacking",
                contentType: "application/json; charset=utf-8",
                type: "POST"
            }
        }
    },
    scrollable: {
        virtual: true
    },

    ...
});

Серверная сторона script должна обрабатывать параметры top (сколько записей для отправки) и skip (где запускать), которые отправляет Kendo.

0
$(function () {
       $("#grid").kendoGrid({
           height: 200,
           columns: [
                { field: "Packserialnumber", width: "150px" },
               { field: "Netweight", width: "50px" },
               { field: "Packusername", width: "150px" },
               { field: "Packdate", width: "100px" }
           ],
           editable: false,
           dataSource: {
               schema: {
                   data: "d",
                   model: {
                       id: "Packserialnumber",
                       fields: {
                           Packserialnumber: { editable: false, nullable: true },
                           Netweight: { type: "number", validation: { required: true, min: 1} },
                           Packusername: { validation: { required: true} },
                           Packdate: { validation: { required: true} }
                       }
                   }
               },
               batch: false,
               transport: {
                   read: {
                       url: "Default.aspx/Pcpacking",
                       contentType: "application/json; charset=utf-8",
                       dataType: "json"
                   }
               }
           }
       });
   });
  • 0
    Вы должны были отредактировать свой оригинальный ответ, а не размещать его повторно. Разъяснение проблемы и ее решения также будет полезным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню