我将 GridView 放置在更新面板内。
<asp:UpdatePanel ID="UpdatePanel4" UpdateMode="Conditional" ChildrenAsTriggers="true"
runat="server">
<asp:GridView ID="GridView_Overview" OnRowCommand="GridView_Layout_RowCommand" />
</asp:GridView>
</asp:UpdatePanel>
当用户按下按钮时,gridView 将填充数据表:
GridView_Overview.DataSource = dataTable;
GridView_Overview.DataBind();
数据表包含超过 10000 条记录。因此,到gridview的绑定(bind)过程大约需要3.4秒。
当在 GridView 中选择一行时:
protected void GridView_Layout_RowCommand(object sender, GridViewCommandEventArgs e)
{if (e.CommandName.Equals("Select"))
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = this.GridView_Overview.Rows[index];
Int64 pID = Int64.Parse(((Label)row.FindControl("ID")).Text); // abc
}
}
如上所述执行 GridView_Layout_RowCommand 花了 5.6 秒。这里有什么问题呢?如何提高选择行的性能。如果我丢弃//abc 代码行,那么速度很快,但我无法获取 ID 值以进行进一步处理。
提前致谢。
最佳答案
出现此问题的原因是只有在遍历整个 DOM 后才会触发来自 UpdatePanel 的异步回发。如果您要向页面添加超过 10000 条记录,那么您的 DOM 将会很大,延迟也会很严重。
解决问题的关键是在触发回发之前销毁 GridView DOM 元素。这样,需要遍历的 DOM 就会少得多。
请参阅此博客文章,了解处理这种情况的一些提示:Slow performance of a GridView inside an UpdatePanel
至少,包括最基本的分页形式将提高客户端性能,因为它将减少添加到页面的 DOM 元素的数量。为了获得最大结果,您需要一个仅选择每个数据页的解决方案,这样您就不需要返回 10000 条记录,而只显示一个子集。
关于asp.net - RowCommand GridView 花了 6.7 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174441/