使用 GridView 和 LINQ to SQL 进行分页
我的 grideview:
<asp:GridView runat="server" ID="MyGridView" AutoGenerateColumns="false"
DataKeyNames="ID"
OnRowCreated="MyGridView_RowCreated" AllowPaging="true" Width="100%"
PageSize="5" onpageindexchanging="MyGridView_PageIndexChanging" >
我的代码隐藏在 page_load 上:
MyGridView.DataSource = new Emp.GetData();
MyGridView.DataBind();
我的代码:
using (DataContext db = new DataContext())
{
var query = //valid query here
query = query.Skip(StartRowIndex *5 ).Take(5);
return query.ToList();
}
如果我的数据库中有 15 条记录,则在页面加载时我会看到第 1,2 3 页的链接,其中显示第 1 页的数据 - 5 条记录。然后,当我转到包含 5 条记录的第 2 页时,我会看到第 1 页和第 3 页的链接。当我转到第 3 页时,我只看到 2 条记录而不是 5 条,有时分页链接也无法正确显示。
我想每页显示 5 条记录,并希望 GridView 确定显示多少页。
我没有使用 LinqDataSource,只是有一个返回列表的方法。
My grideview:
<asp:GridView runat="server" ID="MyGridView" AutoGenerateColumns="false"
DataKeyNames="ID"
OnRowCreated="MyGridView_RowCreated" AllowPaging="true" Width="100%"
PageSize="5" onpageindexchanging="MyGridView_PageIndexChanging" >
My code behind on page_load:
MyGridView.DataSource = new Emp.GetData();
MyGridView.DataBind();
My code:
using (DataContext db = new DataContext())
{
var query = //valid query here
query = query.Skip(StartRowIndex *5 ).Take(5);
return query.ToList();
}
if i have 15 records in my db, upon page load i see links for page 1,2 3 with data for page 1 shown - 5 records. then when i go to page 2 with 5 records, i see page 1 and 3 links. when i go to page 3 i see only 2 records instead of 5 and sometimes the paging link does not show up correctly either.
I want to display 5 records per page and want the GridView to determine how many pages to show.
i am not using a LinqDataSource, just have a method that returns a list.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您确实使用
LinqDataSource
,实际上往往会更容易。在隐藏代码中,您只需重新路由
LinqDataSource
即可调用业务逻辑层。但是,现在需要将DataContext
对象保持打开状态,即不要将其包装在using
块中,否则您将收到错误(并且也不会不必使用Skip(..).Take(..)
应用手动分页。现在
LinqDataSource
应该自动为您管理所有分页。It actually tends to be easier if you do use a
LinqDataSource
.And in the code-behind, you can just re-route the
LinqDataSource
to call your business logic layer. However, it will now need to leave theDataContext
object open, i.e., don't wrap it in ausing
block, or you will get an error (and also don't apply the manual paging withSkip(..).Take(..)
.Now the
LinqDataSource
should manage all the paging for you automatically.或者,您可以使用
PagedDataSource< /code> class
来实现这一点。
这里有一篇文章解释其工作原理。
Alternatively, you could use the
PagedDataSource
class to achieve this.Here's an article explaining how it works.