【问题标题】:GridView commands on huge dataset大型数据集上的 GridView 命令
【发布时间】:2010-12-13 16:41:38
【问题描述】:

我有一个显示超过 30000 行的 GridView,用户需要能够为每一行编辑一个“标志”(复选框)和一个“原因”(文本框)。我想到了两种方法来做到这一点:

1:每次勾选复选框时回发,并在单个行上保存原因和标志 - 如果只编辑一行,速度很快,但是当需要为多行更改标志时变得乏味,因为页面需要每次回发,从而重新绑定了巨大的网格。

2:从复选框禁用自动回发,并且仅在按下全局“更新”按钮时更新表。这允许快速检查/取消检查,但它必须遍历每一行以检查状态 - 我不知道这需要多长时间,坦率地说我不想知道!

我还有其他方法可以使用吗?或许使用 AJAX,但是对于 GridViewRow 来说是否容易使用?

谢谢

【问题讨论】:

  • 基于上述情况,您似乎没有使用分页。任何原因?如果您使用 LINQ 等数据源以及分页,则重新绑定只会拉取和绑定与您的页面大小相当的数据量。
  • 对不起,我正在使用分页 - 但在 GridView 上自动生成分页。

标签: c# asp.net gridview


【解决方案1】:

在我看来,当您第一次加载页面时,您正在显示 CheckBox/TextBox 控件。如果是这种情况,您绝对应该 AutoPostBack。将其视为普通表单,切换到 ASP 中继器控件,将提交的值从单独的页面上的表单中拉出,然后将它们提交到数据库。您的问题中没有任何内容让我相信您需要打破正常的表单提交模型以适应用户与此页面的交互方式。

您没有提到使用编辑/更新/取消按钮,这让我相信您没有使用内置的 GridView 命令。老实说,在我看来,您正试图使该页面适合预先存在的 ASP 控件的模型,而实际上它并不适合。如果我是你(并且有时间),我会使用 ASP Repeater 控件重写此页面,并使用 jQuery 通过 AJAX 调用将页面提交给 ASP.NET WebMethod。前面那句话有很多行话,但一旦你第一次把它去掉,它会简化你编写页面的方式。

编辑:你的评论说 30,000 是一个商业决定,所以我删除了我的回答中表明你在这件事上有选择的部分。我感觉到你的痛苦。

【讨论】:

    【解决方案2】:

    您可以使用 AJAX 来执行此操作。如果我正在做这样的事情,那可能就是我想要的方法。它将为您的用户提供良好的用户体验,并且您不必担心最终会进行大量处理。

    另一方面,如果您有 30,000 条记录,此应用程序对您的用户有用吗?我怀疑有人会查看 30,000 条记录并从中获得任何有用的信息...

    【讨论】:

    • 显示 30000 行是相当愚蠢的,但它适用于当前显示 30000 行的业务系统。它会继续下去,未来会降至 100 以下并保持这种状态......但我被告知他们仍然需要在 GridView 中编辑这 30000 行,遗憾的是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2016-08-01
    • 2020-09-21
    • 2013-04-27
    • 2019-09-19
    • 2015-05-19
    相关资源
    最近更新 更多