fancyf(凡瑞) 老大 进来看一下,其他的大哥也可以进来帮忙!!分不够再加!

aibo7 2005-07-25 10:47:34
to:fancyf(凡瑞) 上次问了你一个如何在主页面关闭弹出的非模式对话框的问题。
这一次又有新的问题了。
实际上我现在的问题是:我有个主页面,在服务器端要从数据库中抽取数据(然后用dataGrid把数据显示出来),但是数据量相当大!!所以页面加载的时候要很长时间!!我现在想做的效果就是在服务器端抽数据之前(也就是页面加载之前)弹出一个,非模式的对话框,上面写有诸如"loading Data"的字样,然后当主页面加载完毕以后,在主页面中关闭非模式对话框(这个问题已经被你解决了)!
请问有没有什么好办法?
我现在的解决方法是:Response.Write("<script>function show(){ win = showModalDialog('WebForm2.aspx',window,'status:false;help:false;Resizable:false;dialogWidth:300px;dialogHeight:300px');}</script>");
Response.Write("window.setTimeout('show()',1000);");
我在Page_Load方法中加入以上方法,打开一个对话框!!然后再对数据库进行操作,但是发现看到的效果是:先对数据库进行操作(要等很长时间),然后再弹出对话框,然后再加载页面,并显示。
但是我要的效果是在对数据库进行操作之前弹出对话框,这样才有让用户等待的效果!!!
我不知道我说得清楚不,望各位老大给出好的解决方法!!分不够,我再另开一贴,给分大家!!!
...全文
225 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
readersm68 2005-07-26
  • 打赏
  • 举报
回复
学习
aibo7 2005-07-26
  • 打赏
  • 举报
回复
up
aibo7 2005-07-26
  • 打赏
  • 举报
回复
不好意思,刚才的代码贴错了:
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write("<script>function show(){ win = showModelessDialog('WebForm2.aspx',window,'status:false;help:false;Resizable:false;dialogWidth:300px;dialogHeight:300px');}</script>");
Response.Write("<script>window.setTimeout('show()',1000);</script>");
Response.Flush();
if(!IsPostBack) ReadRecords();
}
aibo7 2005-07-26
  • 打赏
  • 举报
回复
to: fancyf(凡瑞) ,恩,你提供的资料,我过一会儿看!谢谢!
to: mathsword(梦在流浪) ,弹出窗口是客户的要求,而且这好像和加入等待页面是一个道理吧!可以弹出窗口,当然就也就可以加入等待页面,但是等待页面出来的时候,我要求主页面仍然继续加载,这也是我的目的了,不知道你有什么好方法吗?
to: Ivony() ,我是这样做的,但是效果不对,你如果方便的话,试一下就知道了,帮看一下是什么原因。我的代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write("<script>function show(){ win = showModelessDialog('WebForm2.aspx',window,'status:false;help:false;Resizable:false;dialogWidth:300px;dialogHeight:300px');}</script>");
Response.Write("window.setTimeout('show()',1000);}");
Response.Flush();
if(!IsPostBack) ReadRecords();
}
ReadRecords();//这个方法就是我的后台处理程序了,可以使查询数据库,也可以是其他的任何业务逻辑的处理。但是这个处理可能会要很多时间,所以我想在这个处理之前,弹出对话框当作等待叶面。比如说在这个方法中放一个3层的for循环(我让这个for循环可以跑很长时间),发现对话框是在for都运行完之后才弹出来,没有达到我要的效果!

也谢谢 fly_miss(新年新气象):我说得100000条数据只是个例子,目的是为了让等待的效果更明显!!


还有哪位大哥有办法的,不妨教教小弟我!!!不胜感激!!
Ivony 2005-07-26
  • 打赏
  • 举报
回复
我刚才试了一下,ASP.NET的确很古怪,不知为何Flush根本就没用,一个假方法。。。

不过还是可以用XMLHTTP实现。
daguzhang 2005-07-26
  • 打赏
  • 举报
回复
参考:
Possible Values

sState String that receives one of the following values.uninitialized Object is not initialized with data.
loading Object is loading its data.
loaded Object has finished loading its data.
interactive User can interact with the object even though it is not fully loaded.
complete Object is completely initialized.


The property is read-only. The property has no default value.

Remarks

An object's state is initially set to uninitialized, and then to loading. When data loading is complete, the state of the link object passes through the loaded and interactive states to reach the complete state.

The states through which an object passes are determined by that object; an object can skip certain states (for example, interactive) if the state does not apply to that object.

Data source objects and databound elements are normally populated asynchronously, and certain programmatic operations can only be performed reliably on databound objects when they are ready for use. Therefore, the appropriate code should be written to confirm the readyState of objects prior to performing certain operations on them. For example, walking the rows of a table should not be attempted until after the table has reached the complete state.

The readyState property enables the status of an object to be tested. The correct place to test the readyState property is in the event handler for onreadystatechange. Similarly, a data source object (DSO) fires the ondatasetcomplete event to notify the Web page that the dataset is ready for programmatic operation.

Standards Information

daguzhang 2005-07-26
  • 打赏
  • 举报
回复
当用类似DATAGRID的控件来显示数据的时候,是另开了一个线成来显示,这个时候如果要在数据已经显示完了以后在关闭对话矿,这个时候就要用到document.readyState这个属性,当这个属性为complete的时候表示页面控件加载完毕.
当用类似FOR循环来测试加载的操作时候,如果要弹出对话矿,则要使用异步的方法,可以参考fancyf(凡瑞)提供的文章


Ivony 2005-07-25
  • 打赏
  • 举报
回复
Response.Flush();
孟子E章 2005-07-25
  • 打赏
  • 举报
回复
完全可以
http://dotnet.aspx.cc/ShowDetail.aspx?id=49ML4AO8-5PB3-4KNY-NJZD-LJOIOXV4M1X4
aibo7 2005-07-25
  • 打赏
  • 举报
回复
自己顶!!
fly_miss 2005-07-25
  • 打赏
  • 举报
回复
对于你的问题,我谈谈我的理解,在一般的运用中,很少要求一次性读出所有的数据,当数据量比较大的时候,都是采用分页的做法,这样等待的时间不是太长。
你如果要一个过渡的页面也很简单。在提交的时候,执行一个脚本,加载一个可以动的图片,当页面刷新的时候,这个图片自然就没有了
Ivony 2005-07-25
  • 打赏
  • 举报
回复
你先用Response输出弹出窗口的代码,然后再Flush一下,那么这些东西就会马上发送到客户端去,有什么问题吗?
mathsword 2005-07-25
  • 打赏
  • 举报
回复
可以变通一下,加个等待页面,不必一定非要弹出一个,看过机票查询的等待页面吗?哪个就是这样处理的
fanruinet 2005-07-25
  • 打赏
  • 举报
回复
这就不是那么简单了,看看这两篇文章:
Building a Better Wait Page
http://www.codeproject.com/aspnet/wait_page.asp

Processing Long Running Tasks With Asynchronous Handlers and XMLHTTP
http://www.codeproject.com/aspnet/asynctransactionhandler.asp
aibo7 2005-07-25
  • 打赏
  • 举报
回复
孟子老大,你说的http://dotnet.aspx.cc/ShowDetail.aspx?id=49ML4AO8-5PB3-4KNY-NJZD-LJOIOXV4M1X4我看了,但是并不能解决我的问题。我的问题是在你的WebForm1的Button1.Attributes.Add("onclick", "OpenWin()")之后加上如下代码:
Dim MyString As String
For I As Integer = 1 To 10000
For J As Integer = 1 To 10000
For K As Integer = 1 To 10000
MyString = "111"
Next K
Next J
Next I
(我用这3个跑不完的for循环是为了代替后台的业务操作!当然你也可以从数据库中取100000条数据)
那个WebForm2.aspx的模式对话框还可以弹出来吗?不行吧?我现在要的效果是后台在做大量的业务处理之前,弹出对话框,提示用户需要等待!!怎么解决!!!!???望大哥帮忙!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧