c# - 使用 GridView 和 LINQ to SQL 进行分页

标签 c# linq linq-to-sql gridview pagination

我的 GridView :

<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,只是有一个返回列表的方法。

最佳答案

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

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

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

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

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

关于c# - 使用 GridView 和 LINQ to SQL 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6025964/

相关文章:

C# Windows Phone 7 ListBox 向上/向下滚动事件?

c# - Linq 查询的性能(按类型)

c# - OrderByDescending 在 Linq 中无法正常工作

c# - 尝试创建分部类时出错

.net - LINQ2SQL : How to modify fields values when loading anonymous entities?

c# - 在 c# asp.net Core 中压缩图像

c# - WPF:在 XP 上有 xamlparse 异常但在 Vista 上没有的任何原因?

c# - Office 365 与 Asp.net Web 应用程序(MVC 应用程序)的集成?

c# - 如何从表达式中获取子声明类型?

c# - 使用 EntityFramework 6 和 Linq 批量更新对象列表