.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
。
答案 0 :(得分:1)
您必须使用gvFirst
方法将列表返回ToList()
。所以试试这个:
gvFirst.DataSource = Proinfo.Take(PageSize).ToList();
解释:
因为gvFirst
设置了属性AllowPaging="true"
,所以分页可以与任何实现ICollection
接口的数据源对象一起使用。
ProInfo.Take(PageSize)
会返回IEnumerable
,这就是您需要调用ToList()
方法的原因。
答案 1 :(得分:1)
如果你将全局声明Proinfo称为ICollection
private ICollection<Productinformation> Proinfo = null
然后你使用.Take方法得到的结果是一个不支持分页的枚举,所以你必须把它转换成一个继承ICollection的List。
gvFirst.DataSource = Proinfo.Take(PageSize).ToList();