.aspx:
<asp:GridView ID="gvFirst" runat="server" AutoGenerateColumns="false"
AllowPaging="true"
ondatabound="gvFirst_DataBound" >
<Columns>
<asp:BoundField DataField="ID" HeaderText="ProductID"/>
<asp:BoundField DataField="Name" HeaderText="ProductName" />
</Columns>
<PagerTemplate>
<asp:Panel ID="pnlPager" runat="server">
</asp:Panel>
</PagerTemplate>
</asp:GridView>
.cs:
public class Productinformation
{
public int PID
{
get;
set;
}
public string PName
{
get;
set;
}
}
using (NorthWindDataContext _NorthWindDataContext = new NorthWindDataContext())
{
Proinfo = new List<Productinformation>();
Proinfo = (from p in _NorthWindDataContext.Products
select new Productinformation
{
PID = p.ProductID,
PName = p.ProductName,
}).ToList();
gvFirst.DataSource = Proinfo.Take(PageSize) ;
gvFirst.DataBind();
}
Proinfo
变量是全局声明的。现在,当我运行此代码时,它显示以下错误:
数据源不支持服务器端数据分页
如果我使用 var 类型的变量,那么它可以工作,但是 我们不能全局声明var类型的变量,所以如果我使用它,那么我每次分页都必须调用这个方法。我不想使用
Objectdatasource
。
您必须使用
gvFirst
方法将列表返回到 ToList()
。所以试试这个:
gvFirst.DataSource = Proinfo.Take(PageSize).ToList();
解释:
因为在
gvFirst
上设置属性 AllowPaging="true"
,分页可以与任何实现 ICollection
接口的数据源对象一起使用。
ProInfo.Take(PageSize)
返回 IEnumerable
,这就是为什么您需要调用 ToList()
方法。
如果您全局将 Proinfo 声明为 ICollection
private ICollection<Productinformation> Proinfo = null
然后你使用 .Take 方法,你得到的结果是一个不支持分页的可枚举类型,因此你必须将其转换为从 ICollection 继承的 List。
gvFirst.DataSource = Proinfo.Take(PageSize).ToList();