L’origine dati non supporta il paging dei dati sul lato server

Ho un GridView sul mio schermo e ne ho bisogno per consentire il paging.

markup:

           

Code-behind:

 ObjectDataSource1.SelectParameters["maximumRows"].DefaultValue = "10"; ObjectDataSource1.SelectParameters["startRowIndex"].DefaultValue = "0"; 

Query LINQ:

 public IQueryable GetBookingId(int maximumRows, int startRowIndex) { var result = (FROM a IN dc.tblAppointments SELECT a).Skip(startRowIndex).Take(maximumRows); } 

Tuttavia ricevo questo errore:

L’origine dati non supporta il paging dei dati sul lato server.

Che cosa sto facendo di sbagliato?

Una semplice ToList() sul risultato che var dovrebbe funzionare.

Modifica : come BornToCode ha spiegato nei commenti sotto la mia risposta, il motivo dell’errore è che l’origine dati dovrebbe implementare ICollection. IEnumerable non lo fa, quando fai ToList() lo converte in una lista che implementa ICollection.

Puoi anche usare List generico List . Guarda lo snippet di codice di esempio:

 public List GetContactList(int startindex) { string path = Server.MapPath("~/contacts.xml"); XDocument xd = XDocument.Load(path); IEnumerable results = (from items in xd.Elements("Company").Elements("Contact") select new Company { Id = items.Element("ID").Value, Photo = (string)items.Element("photo").Value, Name = (string)items.Element("Name").Value, BloodGroup = (string)items.Element("Bg").Value, Dob = (string)items.Element("dob").Value, Anniversery = (string)items.Element("avd").Value, Mobile = (string)items.Element("cnum").Value, designation = (string)items.Element("desig").Value, Team = (string)items.Element("team").Value }).Skip(startindex*10).Take(10); return (List) results; } 

È inoltre ansible utilizzare DataSet / DataTable anziché DataReader.

Ho cambiato il mio codice per questo:

 public List ListofNewsTitle() { var query = from n in db.NewsEvents orderby n.NewsDate descending select n.NewsTitle; return query.ToList(); } 

.ToList() alla fine del DataSource, l’assegnazione mi ha funzionato come di seguito:

 gvCaseLabelsLeft.DataSource = caseLabelsList.OrderBy(c=>c.caseLabelNumber).ToList(); 

In ObjectDataSource è sufficiente aggiungere enablePaging="true" che funzionerà.

Query LINQ:

ProductController.cs:

 List products= productModel.GetProducts(start, offset); 

ProductModel.cs:

 public List GetProducts(int start, int offset) { IEnumerable query = from m in db.Products orderby m.Id descending select m; query = query.Skip(start).Take(offset); return query.ToList(); } 

Se stai utilizzando SqldataReader, allora non supporta Paging.

Soluzione a questo errore sta facendo uso di origini dati come raccolte di elenchi generici, DataTable, DataSet, ecc. Per associare il GridView.