将结果集导出到 Excel 时显示加载消息

发布于 2024-07-13 05:51:14 字数 158 浏览 3 评论 0原文

我正在使用 ASP.NET 和 C#,并将非常大的结果集导出到 Excel。 当我的导出代码运行时,我想显示一个“正在加载”动画 gif,以便用户知道他们的请求正在处理。 我一直在尝试用多线程来做到这一点,但我不太熟悉它。 谁能引导我朝正确的方向前进? 谢谢!

乔恩

I'm using ASP.NET and C# and am exporting a very large results set to Excel. While my export code is running I would like to show a "loading" animated gif so the users will know their request is processing. I've been trying to do this with multithreading, but I am not very familiar with it. Can anyone guide me in the right direction? Thanks!

Jon

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

拔了角的鹿 2024-07-20 05:51:14

您是否尝试在服务器上进行多线程? 我建议在您的客户端 JavaScript 中打开一条请等待消息,然后再发布到服务器。 然后在客户端,当您完成发布后,您可以关闭该消息。

在不了解更多关于您的实际设置的情况下,我无法提供更多帮助,但上次我实现此操作时,我做了一些类似的事情:

假设我们有一个使用 JQUERY 的名为 PrintLoadingPanel 的 div,我将 div 设置为显示并接管窗口:

    $("#printLoadingPanel")
       .css({display:"block",top:"0px",left:"0px",height:screen.availHeight});

I然后将启动一个以 1/2 秒为间隔的计时器,该计时器将开始检查我们是否已完成打印。 我只生成和下载小型 PDF,因此我需要更快的响应。 如果您的报告确实很慢,您可能需要对此进行调整:

    window.setTimeout(checkIfDoneDownload,500);

然后我的 CheckIfDoneDownload 函数会访问服务器并检查我们是否已完成生成文件并下载它。 我在这里再次使用 JQUERY 来调用启用 AJAX 的 WCF 服务。 您可以用 PageMethods 或任何其他回调服务器的方式来替换它。

function checkIfDoneDownload()
{

$.ajax({
  type: "POST",
  url: "../Services/Utilities.svc/IsPrintDownloadDone",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
  if (msg.d)
  {
    $("#printLoadingPanel").css("display","none");
  }
  else  {window.setTimeout(checkIfDoneDownload,500);}
  },  
  error: function (xhr, textStatus, errorThrown) {
  if (xhr.status==12030) {checkIfDoneDownload();}
}
});
}

现在在服务器端,我通过 HTTP 处理程序生成下载。 本质上,它所做的第一件事是将会话级别标志设置为 false,然后它所做的最后一件事是将其设置回 true。 我检查是否完成服务仅返回标志的值。

Are you trying to do multi-threading on the server? What I'd recommend is in your client side javascript turn on a please wait message before posting to the server. Then on the client side when your done posting you turn the message off.

Without knowing more about your actual setup I can't help much further, but last time I implemented this I did something along these lines:

Assume we have a div called PrintLoadingPanel using JQUERY I set the div to display and take over the window:

    $("#printLoadingPanel")
       .css({display:"block",top:"0px",left:"0px",height:screen.availHeight});

I then will start a timer with a 1/2 second interval which will start checking if we are done printing. I'm only generating and downloading small PDF's so i needed a quicker response. If your report is really slow you might want to tweak this:

    window.setTimeout(checkIfDoneDownload,500);

Then my CheckIfDoneDownload function hits the server and checks if we finished generating the file and downloaded it. I am using JQUERY here again to call an AJAX enabled WCF service. You could substitute this with PageMethods or any other way to callback to the server.

function checkIfDoneDownload()
{

$.ajax({
  type: "POST",
  url: "../Services/Utilities.svc/IsPrintDownloadDone",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
  if (msg.d)
  {
    $("#printLoadingPanel").css("display","none");
  }
  else  {window.setTimeout(checkIfDoneDownload,500);}
  },  
  error: function (xhr, textStatus, errorThrown) {
  if (xhr.status==12030) {checkIfDoneDownload();}
}
});
}

Now on the server side, I am generating my downloads via an HTTP Handler. Essentially the first thing it does is set a session level flag to false, then the last thing it does is set it back to true. My check if done service just returns the value of the flag.

涫野音 2024-07-20 05:51:14

我在生成报告时遇到了同样的问题。 一个简单的解决方案是在晚上运行报告,然后将其写入服务器。 然后提供报告的链接。

I've run into this same problem with generating reports. A simple solution would be to run the report at night and then write it to the server. Then provide a link to the report.

幼儿园老大 2024-07-20 05:51:14

如果您能够使用 ASP.NET AJAX,那么我建议使用 UpdateProgress 控件(以及 UpdatePanel)。

如果您想要精美的动画 gif 图像,请查看 Ajaxload

If you're in a position to use ASP.NET AJAX then I'd recommend using the UpdateProgress control (along with an UpdatePanel).

If you're after a nice animated gif image then check out Ajaxload.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文