2013-03-13 2 views
0

В настоящее время я реализовал jqgrid, который извлекает данные из БД и возвращает данные JSON в JQGRID.JQGrid Получить данные уровня страницы за один раз

JQGrid называют

 rowNum: 10, 
     rowList: [5, 10], 
     url: "/Home/GetDataFromEntity" 

Данные, возвращаемые из C#

return Json(result, JsonRequestBehavior.AllowGet); 

Что я пытаюсь, если страница имеет 10 записей только что 10 записей я хочу привезти из БД и если они нажимают на следующую page i хочу получить следующие 10 данных, потому что, если данные огромны, я не хочу доводить все данные до memmory, которые, я думаю, будут производительностью Hit.

Как я могу это реализовать?

Благодаря

ответ

0

вы должны реализовать server side pagination для достижения этой цели.

я реализовал в Java, как это: (вы используете C#) использование

int limit = Integer.parseInt(request.getParameter("rows")); // get how many rows we want to have into the grid 
String sidx = request.getParameter("sidx"); // get index row - i.e. user click to sort 
String sord = request.getParameter("sord"); // get the direction 
int start = (limit* page) - limit; 
String rows = request.getParameter("rows"); 

String query = "select * from (select a.*, ROWNUM rnum from (select * from CRM_PROT_STAGES where PROTOCOL_ID = '"+param +"') a where ROWNUM <= "+ limit +")where rnum >="+start; 

выше paarameters, а затем поставить условие в запросе, как указано выше

+0

любые примеры о том, как это сделать? – user2067567

1

Это довольно просто. В основном все, что вам нужно сделать, это реализовать подкачку, где вы запрашиваете только БД для страницы данных, которую вы собираетесь отображать. Вы увидите, что jqGrid предоставит эту информацию вашему контроллеру, чтобы вы могли использовать его при извлечении данных.

Контроллер будет принимать эти данные через что-то вроде (я не знаю, ваш задний конец тек стек так вот C# код) это:

public ActionResult GridDataFetch(string sidx, string sord, int page, int rows, bool _search, string filters) 
{ 
.... 

Затем, когда вы идете извлечь ваши данные, вы может запросить базу данных для страницы данных, которую хочет пользователь, не задерживая весь набор данных. Это может быть сложнее, чем кажется, но для основы это так просто, как Somthing как (опять же C# код)

var pagedQuery = dataset.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows); 

Вы можете видеть выше мы заказываем данные таким образом, что пользователь, указанный и jqGrid прошло вдоль с sidx , а затем мы пропустим все записи перед интересующей нас страницей через skip, а затем возьмем интересующий нас rows. Это снова был метод C# для захвата страницы данных, но основы должны быть там для любой установки. В качестве побочной заметки, если вы делаете какую-либо фильтрацию через сетку или другую логику, вы должны были отфильтровать свой набор данных до этого вызова.

Затем вы передадите этот запрошенный запрос так же, как обычно в JSON.

0

Для этого необходимо использовать подкачку. Вы можете использовать .Take и .Skip методы на стороне сервера

После вы получите ваш ResultSet вы можете сделать следующим образом

var smallResultSet = fullResultSet.Skip(request.PageIndex * request.RecordsCount).Take(request.RecordsCount).ToList(); 

здесь я сделал предположение о том, что вы забирающий ваш ResultSet в fullResultSet переменной, чем фильтровать и храните его в smallResultSet.параметр запроса будет передан при привязке сетки к действию контроллера.

После этого проведите через smallResultSet и создайте свой JSONResult.

Смежные вопросы