Utilizarea JQGrid cu paginare personalizată în Asp.Net MVC

Folosesc JQGrid cu clasa Trirand.Web.Mvc și încerc să-mi dau seama cum se face paginarea personalizată.

I have seen the paging demos here

Problema cu aceste demo-uri este că se leagă direct la un obiect context linq și le permite MVC să aibă grijă de paginare.

   //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);        
    }    

Setul de date pe care vreau să-l corectez este destul de complex și îl returnez dintr-o procedură stocată, ceea ce face căutarea pentru mine.

Deci, tot ce trebuie să dau JQGrid este dimensiunea corectă a rândurilor pentru o anumită pagină a întregului set de rezultate. Pot, de asemenea, să returnez numărul total de rânduri.

Așa că am rezultatele mele într-o Listă myListOfObjects.

Pot trece acest lucru în DataBind folosind myListOfObjects.AsQueryable ()

Problema este că JQGrid crede că există numai rânduri {page size}, deci nu afișează niciuna dintre opțiunile de paginare.

Este posibil să treceți în numărul total de rânduri?

Alte grile, cum ar fi grila MVC Teleriks, vă permit să treceți în numărul total de rânduri și afișează paginarea corectă

0

1 răspunsuri

Ok, deci am reușit să rezolv asta singură. S-ar putea să existe și alte modalități de a face acest lucru, dacă așa aș vrea să le aud!

JQGrid.DataBind produce un obiect JsonResult, a cărui valoare a datelor este setată la propriul obiect Trirands Trirand.Web.Mvc.JsonResponse

Este o clasă internă la Trirand.Web.Mvc, așa că a trebuit să copiez structura pe care o vedeam folosind depanarea Visual Studio.

Are:

  • pagina - numărul paginii curente
  • înregistrări - numărul total de înregistrări
  • rânduri - de tipul Trirand.Web.Mvc.JsonRow (pe care trebuie să o replic și eu)
  • total - numărul total de pagini necesare

JsonRow arata ca:

  • celula - un șir de coloane din coloanele dvs.
  • id - ID-ul rândului dvs.

Deci, codul meu a arătat astfel:

var jsonList = new List();
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 meu arată astfel:

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?? "";

            }
        }
0
adăugat