使用Linq查询作为数据源的ASP.NET GridView分页

3
我正在寻找一种方法,在运行时使用LINQ查询设置数据源时,使用GridView进行分页。以下是我的代码:

ETDataContext etdc = new ETDataContext();
var accts = from a in etdc.ACCOUNTs
            orderby  a.account_id
            select new
            {
                Account = a.account_id,
                aType = a.SERVICEs.FirstOrDefault().SERVICE_TYPE.service_type_desc,
                name = a.SERVICEs.FirstOrDefault().service_name,
                Letter_dt = a.create_dt,
                PrimAccthldr = a.PEOPLE.first_name + " " + a.PEOPLE.middle_name + " " + a.PEOPLE.last_name
             };
GridView1.DataSource = accts;
GridView1.BindData();

我将网格设置为允许分页,但是出现了一个错误,提示未处理PageIndexChanging事件。我搜索了一下,找到了以下内容:

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
     GridView1.PageIndex = e.NewPageIndex;
     GridView1.DataBind();
}

但是这种方法在使用datatable时很有效,但在使用linq时就不行了。如果我在事件中添加重新绑定,它必须重新查询7000条记录,这可能会有点慢。有人知道如何在使用linq时修复分页吗?

1个回答

3

不,我不会为此使用DAL或ObjectDataSource对象。只需使用LINQ创建匿名类型,然后直接将其绑定到网格即可。 - ecspot
如果按照这种方式进行,性能会很差。这不是正确的做法... 例如,您应该使用LINQ数据源,它为您提供了有效分页的支持。 - Leniel Maccaferri
我无法使用LinqDataSource链接多个表,否则我只需绑定它即可。您知道使用LinqDataSource执行此查询的方法吗?数据来自4个不同的表。 - ecspot
你绝对可以。阅读这篇文章:http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx。跳转到这个部分:使用asp:LinqDataSource选择事件。 - Leniel Maccaferri
使用 LinqDataSource 的选择事件添加自定义查询非常顺利。感谢您的帮助。 - ecspot
一个匿名用户想将这个添加到回答中,但我认为它更适合作为注释:在 GridView 中添加 onpageindexchanging="dgvReport_PageIndexChanging",然后就可以完美运行了! - Martin Turjak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接