La fuente de datos no es compatible con la paginación de datos del lado del servidor

Tengo un GridView en mi pantalla y lo necesito para permitir la paginación.

Margen:

           

Código detrás:

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

Consulta LINQ:

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

Sin embargo recibo este error:

La fuente de datos no es compatible con la paginación de datos del lado del servidor.

¿Qué estoy haciendo mal?

Un simple ToList() en su resultado var debería funcionar.

Editar : como BornToCode explicado en los comentarios debajo de mi respuesta, la razón del error es que la fuente de datos debe implementar ICollection. IEnumerable no lo hace, cuando lo hace ToList() lo convierte en una lista que implementa ICollection.

También puede usar la List genérica List . Ver el fragmento de código de muestra:

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

También puede usar DataSet / DataTable en lugar de DataReader.

Cambié mi código a esto:

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

.ToList() al final de DataSource, estoy asignando trabajo para mí como a continuación:

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

En ObjectDataSource simplemente agregue enablePaging="true" que funcionará.

Consulta 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 está utilizando SqldataReader, entonces no es compatible con Paginación.

La solución a este error está haciendo uso de DataSources, como las colecciones de la Lista genérica, DataTables, DataSets, etc., para vincular GridView.