数据源不支持服务器端数据分页

我的屏幕上有一个GridView,需要它来允许分页。

标记:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1"> <Columns> <asp:BoundField DataField="appID" HeaderText="appID" SortExpression="appID" /> </Columns> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetBookingId" TypeName="AppointmentRepository"> <SelectParameters> <asp:Parameter Name="maximumRows" Type="Int32" /> <asp:Parameter Name="startRowIndex" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource> 

代码隐藏:

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

LINQ查询:

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

但是,我收到此错误:

数据源不支持服务器端数据分页。

我究竟做错了什么?

一个简单的ToList()你的结果var应该工作。

编辑 :由于BornToCode在下面的评论中解释我的答案,错误的原因是数据源应该实现ICollection。 IEnumerable不会,当你做ToList()它将它转换成实现ICollection的列表。

你也可以使用通用的List<T> 。 请参阅示例代码片段:

 public List<Company> GetContactList(int startindex) { string path = Server.MapPath("~/contacts.xml"); XDocument xd = XDocument.Load(path); IEnumerable<Company> 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<Company>) results; } 

您也可以使用DataSet / DataTable而不是DataReader。

我已经改变了我的代码:

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

.ToList()在数据源的末尾,我指定为我工作如下:

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

在ObjectDataSource中,只需添加enablePaging="true"

LINQ查询:

ProductController.cs:

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

ProductModel.cs:

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