我使用GridView
来显示来自DB的数据。首先,我将数据从DB查询到list<list<string>>
,使用linq排序,将此数组复制到DataTable
并将DataTable
绑定到GridView
。但是如果在DataTable
超过1000行 - 它工作很长或不起作用(浏览器中的错误)。
如何解决这个问题?
UPDATE我在列中使用rowspan并为所有行创建一个删除按钮,如果我使用分页wiil它可以工作吗?
<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>
答案 0 :(得分:0)
我的建议是在您的GridView中使用延迟加载模式。 你可以参考: LazyLoadUpdatePanelusingTimerControlAJAX
或者您可以实现自定义分页
答案 1 :(得分:0)
您可以在网格视图中使用分页,网格大小为10,20,30以容纳大量数据,以便页面不会崩溃。
尝试参考此示例 http://www.codeproject.com/Articles/106678/Display-Large-Amount-of-Data-in-GridView-with-Sear
答案 2 :(得分:0)
好像你在一个往返时间里做了很多服务器端代码。你应该把它做得更少,以便页面可以在网格视图中显示结果。
以下是您应该做的一些事情:
不需要先在列表中存储数据表然后再排序。您可以直接使用DATAVIEW类对DB中的结果进行排序。
我认为您不应该在单个页面中显示网格视图中的所有1000条记录。您应该在网格视图中使用PAGING。这也是网格视图的内置功能,您可以根据需要在一个网格视图页面中显示记录数。
参考如何做到这一点有完整的例子。请点击以下链接 http://www.dotnetgallery.com/kb/resource12-How-to-implement-paging-and-sorting-in-aspnet-Gridview-control.aspx
<强>更新强>:
如果要使用每行上的链接按钮删除gridview中的行。然后按照以下文章
您可以将UpdatePanel
放在gridview之外。首先尝试使用上面的代码(来自链接),然后尝试添加更新面板。如果您觉得有任何困难,请在此处