微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web页面实现后台数据处理进度与剩余时间的显示

    1、页面后台代码添加如下属性

/// <summary>
/// 总数
</summary>
private double total
{
    set
    {
        Session["DPMS.POP.POP_ExcelLeadIn_total"] = value;
    }
    get
    {
        if (Session["] == null)
        {
            return 0;
        }
        return Convert.Todouble(Session["]);
    }
}
 当前进度
int cur
{
    DPMS.POP.POP_ExcelLeadIn_curreturn Convert.ToInt32(Session[ 错误信息
string errMsg
{
    DPMS.POP.POP_ExcelLeadIn_errMsgreturn .Empty;
        }
        return Session[].ToString();
    }
}
 开始时间
private DateTime startTime
{
    DPMS.POP.POP_ExcelLeadIn_startTimereturn DateTime.Now;
        }
        return Convert.ToDateTime(Session[]);
    }
}
View Code

    2、在处理数据的开始,初始化total和startTime变量:

total = int.Parse(dataSet.Tables[0].Rows[0][0].ToString());
startTime = DateTime.Now;

    3、在处理数据过程中,不断累加cur:

cur++;

    4、前端每隔500毫秒获取进度:

<script type="text/javascript">
    //更新进度
    function refreshProcess() {
        var itv = setInterval( () {
            $.ajax({
                url: "ExcelLeadIn.aspx?action=getProcess&t=" + new Date().valueOf(),type: "POST",data: {},success:  (data) {
                    if (data == "导入进度:100.00%") {
                        clearInterval(itv);
                        $("#msg").html(data);
                        alert("导入成功");
                    } else {
                        if (data.indexOf("错误:") == 0) {
                            clearInterval(itv);
                        }
                        $("#msg").html(data);
                    }
                }
            });
        },500);
    }
    refreshProcess();
</script>
View Code

    5、后台计算进度:

protected void Page_Load(object sender,EventArgs e)
{
    string result = .Empty;

    if (Request[action"] == getProcess)
    {
        try
        {
            LoginEntity loginUser = (LoginEntity)this.Session[BasePage.LOGIN_USER_KEY];
            string userId = loginUser.USER_ID;
            if (.IsNullOrEmpty(errMsg))
            {
                if (total == )
                {
                    result = 导入进度:0%;
                }
                
                {
                    DateTime Now = DateTime.Now;
                    TimeSpan ts = Now - startTime;

                    string time = .Empty;
                    double per = cur / total;
                    if (per > )
                    {
                        double totalSeconds = ts.TotalSeconds / per - ts.TotalSeconds;
                        if (totalSeconds > 60)
                        {
                            time = (int)Math.Round(totalSeconds / 60) + ;
                        }
                        
                        {
                            time = (int)Math.Round(totalSeconds) + ;
                        }
                    }

                    string percent = (cur / total * 100).ToString(0.00);
                    if (percent == 100.00)
                    {
                        cur = ;
                        total = ;
                        result = string.Format(导入进度:{0}%
                    {
                        result = 导入进度:{0}%,剩余时间:{1}
            {
                result = 错误" + errMsg;
            }
        }
        catch (Exception ex)
        {
            result =  ex.Message;
        }
    }

    if (!.IsNullOrEmpty(result))
    {
        Response.Write(result);
        Response.End();
    }
}
View Code

    效果图(文字错了,不是“导入进度”,而是“数据处理进度:”):

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐