2012-06-01 3 views
0

Я использую JQGrid с классом Trirand.Web.Mvc и пытаюсь выяснить, как выполнить пользовательский пейджинг.Использование JQGrid с пользовательским поисковым вызовом в Asp.Net MVC

Я видел пейджинговой демку here

Проблемы с этим демосом, что они связываются непосредственно с объектом контекста LINQ и позволяет MVC заботиться о пейджинге.

// This method is called when the grid requests data. You can choose any method to call   
    // by setting the JQGrid.DataUrl property   
    public JsonResult PerformanceLinq_DataRequested()   
    {    
     // Get both the grid Model and the data Model    
     // The data model in our case is an autogenerated linq2sql database based on Northwind.    
     var gridModel = new OrdersJqGridModel();    
     var northWindModel = new NorthwindDataContext();    
     // return the result of the DataBind method, passing the datasource as a parameter    
     // jqGrid for ASP.NET MVC automatically takes care of paging, sorting, filtering/searching, etc 
     return gridModel.OrdersGrid.DataBind(northWindModel.OrdersLarges);   
    }  

Набор данных Я хочу связываться с довольно сложным и я возвращаю его из хранимой процедуры, которая делает подкачки для меня.

Так что все, что я должен предоставить JQGrid, - это правильный размер строк для определенной страницы всего набора результатов. Я также могу вернуть общее количество строк.

Итак, у меня есть результаты в списке myListOfObjects.

я могу передать это в DataBind с помощью myListOfObjects.AsQueryable()

Проблема заключается в том, JQGrid считает, что существует только {размер страницы} строк, поэтому не отображает какой-либо из вариантов подкачки.

Можно ли пройти в общем количестве строк?

Другие сетки, как Teleriks MVC сетки позволяет передать в общее количество строк, и он отображает пейджинг правильно

ответ

0

Ok, так что мне удалось решить эту проблему сам. Могут быть другие способы сделать это, если так я хотел бы их услышать!

JQGrid.DataBind производит объект JsonResult, значение которого данных установлено значение Trirands собственный объект Trirand.Web.Mvc.JsonResponse

Это внутренний класс их Trirand.Web.Mvc, поэтому я должен был скопировать его структуру, которую я мог видеть с помощью отладки Visual Studio.

Она:

  • страница - текущий номер страницы
  • записей - общее количество записей
  • строк - типа Trirand.Web.Mvc.JsonRow (который мне нужно повторить тоже)
  • всего - общее число страниц необходимо

JsonRow выглядит следующим образом:

  • клетка - строковый массив из ваших колонок
  • Ид - ваш идентификатор строки

Так что мой код выглядит следующим образом:

var jsonList = new List<JSONRow>(); 
myData.ForEach(x => jsonList.Add(new JSONRow(x))); 

var jsonResult = Json (new 
          { 
           page = page, 
           rows = jsonList.ToArray(), 
           records = totalRows, 
           total = Math.Round((double)totalRows/rows, MidpointRounding.AwayFromZero) 
          }, JsonRequestBehavior.AllowGet); 


    return jsonResult; 

Мой JsonRow выглядит следующим образом:

public class JSONRow 
     { 
      public string[] cell { get; set; } 
      public string id { get; set; } 

      public JSONRow(MyObjectType myObject) 
      { 
       id = myObject.id; 
       cell = new string[3]; 
       cell[0] = myObject.Col1; 
       cell[1] = myObject.Col2?? ""; 
       cell[2] = myObject.Col3?? ""; 

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