asp.net - RowCommand GridView 花了 6.7 秒

标签 asp.net gridview

我将 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/

相关文章:

javascript - 尝试使用 "style.visibility"将 div 设置为在代码中可见

C#:lock 语句中的回调函数是否也被锁定?

c# - 安全地实现两因素身份验证

c# - UpdatePanel 中的 GridView - 在单击按钮时获取更新的文本框值

android - GridView 图像未正确加载

c# - 无法找到使用 C# 插入 AS Access 数据库的代码

jquery - 为每个指定字符添加换行符的最佳方法? (asp.net)

asp.net - 如何使 ASP :Image? 的可见性为假

c# - 从数据库填充 Resource.resx 文件

vb.net - VB.NET 中需要类似 Excel 的网格