为什么asp.net不能在gridview控件上有效地进行分页?

时间:2011-02-26 14:54:11

标签: asp.net linq-to-sql gridview linq-to-entities pagination

我有一个包含数千条记录的网站,每次我做出一个动作时,gridview都会通过ajax发送大约300kb的内容。 我尝试制作一个自定义分页维护ajax功能,排序,但它是如此复杂。 我搜索了一个黑客,但我找不到任何东西。

链接: http://www.nikhedonia.com/notebook/entry/efficient-paging-for-gridview/ http://kpumuk.info/asp-net/gridview-with-custom-digg-like-pager/

@mellamokb,这是我对gridview进行数据绑定的方式

CODE:

Dim res = From r In dc.Reservas _
    From u In dc.UsuariosData Where r.usr_Id = u.usr_Id _
    From c In dc.Campings Where c.camp_Id = r.camp_Id And r.sta_Id <> 2 _
    From rec In dc.OrdenesRegistros Where rec.rec_Id = r.rec_Id _
    From o In dc.Ordenes Where o.ord_Id = rec.ord_Id _
    From p In dc.Pagos Where p.pay_Id = o.pay_Id _
    From z In dc.Zonas Where z.zon_Id = r.zon_Id _
    Select New With {.res_Id = r.res_Id, _
        .usr_NickName = u.usr_NickName, .usr_Name = u.usr_Name, _
        .usr_LastName = u.usr_LastName, .usr_Email = u.usr_Email, _
        .usr_Cel = u.usr_Cel, .camp_Name = c.camp_Name, _
        .res_CreationDate = r.res_CreationDate, _
        .pay_Name = p.pay_Name, _
        .sta_Id = r.sta_Id, .camp_Id = c.camp_Id, .res_StartDate = r.res_StartDate, _
        .res_EndDate = r.res_EndDate, .zon_Id = z.zon_Id}

Session("datosGridView") = res
GridView_ZC.DataSource = Session("datosGridView")
GridView_ZC.DataBind()

2 个答案:

答案 0 :(得分:0)

分页应由数据源控件处理。如果您使用LinqDataSource控件,那么它应该使用AutoPage="true" AFAIK进行分页。

修改

您的数据源没有分页,因此在GridView对其进行分页之前,所有数据都必须流向GridView。您的LINQ-to-SQL查询将返回所有记录。

您希望使用“智能”数据源,例如LinqDataSource控件。最简单的方法是声明LinqDataSource,将GridView绑定到标记中的数据源,然后覆盖Selecting的{​​{1}}事件以指定自定义数据检索逻辑: / p>

LinqDataSource

代码隐藏:

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

<asp:GridView ID="MyGridView" DataSourceID="MyDataSource" ... >

答案 1 :(得分:0)

检查一下:http://www.seila.gov.kh/eang/ASPNET2.0/Web_2.0_With_ASP_NET_3.5.pdf 有几个关于优化和性能的章节,我回忆一下有关gridview控件的一些内容。