2010-08-27 96 views
3

我正在寻找一种方法来使用linq查询在运行时设置数据源时使用GridView进行分页。这里是我的代码:使用Linq查询作为数据源的ASP.NET 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(); 
} 

但是效果很好,当你使用一个数据表,但不与LINQ。如果我在该事件中添加重新绑定,它必须重新查找7000条可能有点慢的记录。有没有人知道如何解决使用linq这样的分页问题?

回答

3
+0

描述的源不要使用DAL或objectdatasource对象是。只需简单地用linq创建一个匿名类型,然后直接绑定到网格。 – ecspot 2010-08-27 02:48:11

+0

如果想按照这种方式,你会有糟糕的表现。这不是这样做的正确方式......您应该使用LINQ数据源,例如,为您提供高效分页支持。 – 2010-08-27 02:57:11

+0

我无法使用linqdatasource链接多个表,否则我只会绑定到那个。你知道一种使用linqdatasource来做这个查询的方法吗?数据来自4个不同的表格。 – ecspot 2010-08-27 03:01:53