使用 GridView 和 LINQ to SQL 进行分页

发布于 2024-11-07 19:53:38 字数 861 浏览 0 评论 0原文

我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人间☆小暴躁 2024-11-14 19:53:38

如果您确实使用 LinqDataSource,实际上往往会更容易。

<asp:LinqDataSource ID="MyDataSource" runat="server"
    OnSelecting="MyDataSource_Selecting">
</asp:LinqDataSource>

在隐藏代码中,您只需重新路由 LinqDataSource 即可调用业务逻辑层。但是,现在需要将 DataContext 对象保持打开状态,即不要将其包装在 using 块中,否则您将收到错误(并且也不会不必使用 Skip(..).Take(..) 应用手动分页。

protected void MyDataSource_Selecting(object sender,
        LinqDataSourceSelectEventArgs e) {
    e.Result = Emp.GetData();
}

现在 LinqDataSource 应该自动为您管理所有分页。

It actually tends to be easier if you do use a LinqDataSource.

<asp:LinqDataSource ID="MyDataSource" runat="server"
    OnSelecting="MyDataSource_Selecting">
</asp: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 the DataContext object open, i.e., don't wrap it in a using block, or you will get an error (and also don't apply the manual paging with Skip(..).Take(..).

protected void MyDataSource_Selecting(object sender,
        LinqDataSourceSelectEventArgs e) {
    e.Result = Emp.GetData();
}

Now the LinqDataSource should manage all the paging for you automatically.

日久见人心 2024-11-14 19:53:38

或者,您可以使用 PagedDataSource< /code> class来实现这一点。

这里有一篇文章解释其工作原理。

Alternatively, you could use the PagedDataSource class to achieve this.

Here's an article explaining how it works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文