网格视图使用List()时绑定问题

问题描述 投票:0回答:2

.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

c# asp.net linq gridview pagination
2个回答
1
投票

您必须使用

gvFirst
方法将列表返回到
ToList()
。所以试试这个:

gvFirst.DataSource =  Proinfo.Take(PageSize).ToList();

解释

因为在

gvFirst
上设置属性
AllowPaging="true"
,分页可以与任何实现
ICollection
接口的数据源对象一起使用。

ProInfo.Take(PageSize)
返回
IEnumerable
,这就是为什么您需要调用
ToList()
方法。


1
投票

如果您全局将 Proinfo 声明为 ICollection

private ICollection<Productinformation> Proinfo = null

然后你使用 .Take 方法,你得到的结果是一个不支持分页的可枚举类型,因此你必须将其转换为从 ICollection 继承的 List。

gvFirst.DataSource =  Proinfo.Take(PageSize).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.