【问题标题】:GridView display more then 1000 rowsGridView 显示超过 1000 行
【发布时间】:2014-09-19 04:36:46
【问题描述】:

我使用GridView 来显示来自数据库的数据。首先我从DB查询数据到list<list<string>>,使用linq排序,复制这个数组到DataTable,绑定DataTableGridView。但是,如果在DataTable 中超过 1000 行 - 它可以工作很长时间或无法正常工作(浏览器中的错误)。 如何解决这个问题?

更新我在列中使用行跨度并为所有行创建一个删除按钮,如果我使用分页,它会起作用吗?

<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnDataBinding="GridView1_DataBinding" OnRowDeleted="GridView1_RowDeleted" OnRowDeleting="GridView1_RowDeleting" > 

     <Columns>
        <asp:BoundField DataField="Number" ItemStyle-Width="200px" > <ItemStyle Width="200px" > </ItemStyle>
        </asp:BoundField>

        <asp:BoundField DataField="Name" ItemStyle-Width="200px" > <ItemStyle Width="200px" > </ItemStyle>
        </asp:BoundField>

        <asp:BoundField DataField="Nameoid" ItemStyle-Width="200px" > <ItemStyle Width="200px" > </ItemStyle>
        </asp:BoundField>
        <asp:TemplateField>
                <ItemTemplate>
                    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                        <ContentTemplate>

                            <asp:Button ID="Button2" runat="server" Text="Button" OnClientClick="return DeleteConfirm();" OnClick="Button2_Click" />
                           <asp:HiddenField ID="HiddenField2" runat="server" Value='<%#Bind("Number") %>' />

                        </ContentTemplate>
                    </asp:UpdatePanel>
                </ItemTemplate>
            </asp:TemplateField>

     </Columns>
     </asp:GridView>     

【问题讨论】:

  • 您认为 1000 行会很快吗?为什么不将其拆分为用户(和页面)可以合理处理的 50 或 100 页。
  • 请做一些渐进式抓取加载技术

标签: c# asp.net gridview ado.net


【解决方案1】:

您似乎在一次往返时间内执行了大量服务器端代码。您应该将其缩小,以便页面可以在网格视图中显示结果。

以下是你应该做的几件事:

  1. 无需先存入列表再存入数据表再排序。您可以直接使用 DATAVIEW 类对 DB 中的结果进行排序。

  2. 我认为您不应该在单个页面的网格视图中显示所有 1000 条记录。您应该在网格视图中使用 PAGING。这也是网格视图的内置功能,您可以根据需要在一个网格视图页面中显示记录数..

为了参考如何做到这一点,有完整的例子。按照下面的链接 http://www.dotnetgallery.com/kb/resource12-How-to-implement-paging-and-sorting-in-aspnet-Gridview-control.aspx

更新

如果您想在 gridview 中删除一行,每行上都有一个链接按钮。然后按照下面的文章

enter link description here

您可以将UpdatePanel 放在gridview 之外。首先尝试使用上面的代码(来自链接),然后尝试添加更新面板。如果您觉得有任何困难,请在这里询问。

【讨论】:

  • 如果您使用的是网格视图,那么您可以直接为每一行添加删除按钮。无需编码或手动工作!有内置的选择、更新、删除按钮!
  • 使用行跨度和添加删除按钮有什么特殊要求吗?
  • 不,我使用 UpdatePanel 作为按钮,当用户单击删除按钮时 - 在 DB 中删除了此行,在表中此按钮变为非活动状态。
  • 使用内置的删除按钮并将网格视图放在更新面板中。
  • 更新问题,编码我如何创建表。如果我把网格视图放到更新面板上会发生什么?
【解决方案2】:

我的建议是在您的 GridView 中使用延迟加载模式。 你可以参考: LazyLoadUpdatePanelusingTimerControlAJAX

或者你可以实现自定义分页

Custompaging

【讨论】:

    【解决方案3】:

    您可以在网格大小为 10、20、30 的网格视图中使用分页来容纳大量数据,以免页面崩溃。

    尝试参考这个例子 http://www.codeproject.com/Articles/106678/Display-Large-Amount-of-Data-in-GridView-with-Sear

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2012-10-18
      • 1970-01-01
      • 2022-09-26
      • 2020-08-20
      • 2015-06-21
      相关资源
      最近更新 更多