La source de données ne prend pas en charge la pagination des données côté serveur

J’ai un GridView sur mon écran et j’en ai besoin pour permettre la pagination.

Balisage:

           

Code-behind:

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

Requête LINQ:

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

Cependant je reçois cette erreur:

La source de données ne prend pas en charge la pagination des données côté serveur.

Qu’est-ce que je fais mal?

Un simple ToList() sur votre résultat var devrait fonctionner.

Edit : Comme BornToCode a expliqué dans les commentaires ci-dessous ma réponse, la raison de l’erreur est que la source de données doit implémenter ICollection. IEnumerable ne le fait pas, lorsque vous faites ToList() il le convertit en une liste qui implémente ICollection.

Vous pouvez également utiliser la List générique List . Voir l’extrait de code exemple:

 public List GetContactList(int startindex) { ssortingng 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 = (ssortingng)items.Element("photo").Value, Name = (ssortingng)items.Element("Name").Value, BloodGroup = (ssortingng)items.Element("Bg").Value, Dob = (ssortingng)items.Element("dob").Value, Anniversery = (ssortingng)items.Element("avd").Value, Mobile = (ssortingng)items.Element("cnum").Value, designation = (ssortingng)items.Element("desig").Value, Team = (ssortingng)items.Element("team").Value }).Skip(startindex*10).Take(10); return (List) results; } 

Vous pouvez également utiliser DataSet / DataTable au lieu de DataReader.

J’ai changé mon code pour ceci:

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

.ToList() à la fin de la .ToList() travail comme ci-dessous:

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

Dans enablePaging="true" ajoutez simplement enablePaging="true" qui fonctionnera.

Requête 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(); } 

Si vous utilisez SqldataReader, sa prise en charge n’est pas prise en charge.

La solution à cette erreur consiste à utiliser des sources de données telles que les collections de listes génériques, les DataTables, les DataSets, etc. pour lier GridView.