Здравствуйте. Я использую jqgrid для загрузки некоторых данных в приложение .net MVC 3.0 C #.
Существует сетка материалов, которую необходимо загрузить примерно в 6 разных местах.Они все одинаковы.Сетка перечисляет цены и детали около 8700 наименований.
Проблема, с которой я столкнулся, состоит в том, что в двух столбцах «стоимость» и «цена» есть вычисления, которые выполняются из базы данных.Эти два столбца делают загрузку сетки чрезвычайно медленной.
В списке испытаний материалов, с которым мы работали, изначально было около 730 наименований.В первый раз без какой-либо оптимизации для полной загрузки сетки потребуется около 1 минуты 30 секунд.После изменений это снизилось до 4 секунд, что является приемлемым.
Сейчас мы работаем с реальным списком, который будет использоваться для материалов, и этот список содержит более 8500 пунктов.После начальной загрузки речь идет о 2-х минутной проверке, чтобы загрузить 8500 предметов.
Это действительно будет неприемлемо, и поэтому я думаю, что лучшим решением будет использование функции панели инструментов поиска или внешнего поиска, который загружает элементы, но только элементы результатов поиска.
Итак, что я хотел бы видеть, так это то, что после загрузки начальной страницы сетка пуста и заполняется только после того, как поиск завершен, и отображаются только результаты поиска.
Если возможно, лучше всего сделать это с помощью функции панели инструментов поиска.Это уже работает правильно, но после начальной долгой загрузки.
Любые предложения будут очень приветствоваться.Я не оригинальный программист, просто пытаюсь получить некоторую информацию, поэтому мне не нужно платить моему разработчику за поиск в Google, если это возможно.
Спасибо за ваше время, если вам нужен пример текущего кода, пожалуйста, дайте мне знать, если это поможет, или если вы можете просто предоставить пример кода, если то, что мне нужно, возможно,
Код стороны Serer:
public ActionResult EstimateMaterialAddGridData(string sidx, string sord, int page, int rows)
{
IQueryable<Material> mats;
mats = Material.Find(x => x.OwnerId == UserAccount.GetOwnerId && x.isDeletedFromCatalog == false).AsQueryable();
int pageIndex = page - 1;
int pageSize = rows;
int totalRecords = mats.Count();
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
var jsonData = new
{
total = totalPages,
page = page,
records = totalRecords,
rows = (
from sub in mats
select new
{
i = sub.Id,
cell = new string[] {
sub.Id.ToString(),
sub.Id.ToString(),
sub.Id.ToString(),
sub.ProductCode,
sub.Description,
sub.Units,
sub.Categories,
sub.UnitCost.ToString(),
sub.Price.ToString()
}
}
).ToArray()
};
return Json(jsonData);
}
Код сетки JS`jQuery (документ) .ready (function () {var grid = jQuery ("# mgrid");
grid.jqGrid({
url: '/Material/EstimateMaterialAddGridData',
datatype: 'json',
mtype: 'POST',
colNames: ['Id', '','View/Edit', 'Product Code', 'Description', 'Units', 'Categories', 'Cost', 'Price'],
colModel: [
{ name: 'Id', index: 'Id', key: true, hidden: true, editrules: { edithidden: true} },
{ name: 'Add', index: 'Add', sortable: false, width: 50,search:false, resizable: false, editable: false, align: 'center', formatter: formatLink, classes: 'not-editable-cell' },
{ name: 'Open', index: 'Open', sortable: false, width: 90,search:false, resizable: false, editable: false, align: 'center', formatter: formatLinkNew, classes: 'not-editable-cell' },
{ name: 'ProductCode', index: 'ProductCode', sorttype: 'text',search:true, width: 100, resizable: false },
{ name: 'Description', index: 'Description', sorttype: 'text',search:true, width: 275, resizable: false },
{ name: 'Units', index: 'Units', sorttype: 'text', width: 75,search:true, resizable: false },
{ name: 'Categories', index: 'Categories', sorttype: 'text',search:true, width: 300, resizable: false, editable: false, },
{ name: 'UnitCost', index: 'UnitCost', sorttype: 'float', width: 75,search:true, align: 'right', resizable: false, editable: false, formatter: 'currency' },
{ name: 'Price', index: 'Price', sorttype: 'float', width: 75, search:true,align: 'right', resizable: false, editable: false, formatter: 'currency' },
],
pager: '#mpager',
height: '100%',
rowNum: 10,
rowList: [10, 20, 50, 100],
sortname: 'Id',
sortorder: 'desc',
sortable: true,
loadonce: true,
ignoreCase: true,
viewrecords: true,
caption: 'Material',
cellEdit: false,
hidegrid: false,
viewrecords: true,
});
grid.jqGrid('navGrid', '#mpager',
{ resize: false, add: false, del: false, search: true, refresh: true, edit: false, alerttext: 'Please select an material' }
).jqGrid('navButtonAdd', '#mpager',
{ title: "Create New Material Catalouge", buttonicon: "ui-icon-plus", onClickButton: newMaterial, position: "First", caption: "" });`