Ok,
一直在我的 GridView 中测试相对较小的数据集,一切都运行良好。然而,我现在已经进入正确的 UAT 并尝试将 17,000 条记录加载到我的网格中,这基本上使我的 Web 应用程序陷入了停滞。
基本上,用户登录并在验证后加载所有数据网格,其中一个包含 17k 条记录。在所有内容加载之前,最终用户都会在登录页面上使用左手。所以我需要修复它。
网格的代码是:
DataTable dtValueDateCurrency = null;
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Reporting"].ConnectionString);
using (conn)
{
conn.Open();
//Load all other grid data
using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(TSQL1, conn))
{
dtValueDateSummary = new DataTable();
sqlAdapter.Fill(dtValueDateSummary);
grdValueDateSummary.DataSource = dtValueDateSummary;
grdValueDateSummary.DataBind();
}
}
有没有办法增加加载时间?分页不是一个选项,因为我正在使用 JQuery 来处理这个问题。
在一个查询中加载 17,000 条记录会让你丧命。我强烈建议对 gridview 进行分页。
首先,您需要按如下方式更改存储过程。
ALTER PROCEDURE [dbo].[SomeTable_GetPagedResults]
(
@StartRowIndex int,
@MaximumRows int
)
AS
SET NOCOUNT ON
Select
RowNum,
[ID],
[foo],
[bar]
From
(Select
[ID],
[foo],
[bar],
Row_Number() Over(Order By [ID] Desc) As RowNum
From dbo.[SomeTable] t)
As DerivedTableName
Where RowNum Between @StartRowIndex And (@StartRowIndex + @MaximumRows)
现在您有了一个可分页查询。
您还需要一个查询来获取完整的行数。
ALTER PROCEDURE [dbo].[SomeTable_GetRowCount]
AS
SET NOCOUNT ON
return (Select Count(ID) As TotalRecords From SomeTable)
每次更改页面时都会绑定网格。
protected void gridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridView1.PageIndex = e.NewPageIndex;
BindGrid(); // this is whatever method you call to bind your data and execute your stored procedure.
}
And the BindGrid()
方法将调用您的两个存储过程(一个用于获取完整的行数,另一个用于获取与当前页面相关的结果)
补充阅读
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)