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


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

    /// <summary>
    /// 总数
    /// </summary>
    private double total
    {
        set
        {
            Session["DPMS.POP.POP_ExcelLeadIn_total"] = value;
        }
        get
        {
            if (Session["DPMS.POP.POP_ExcelLeadIn_total"] == null)
            {
                return 0;
            }
            return Convert.ToDouble(Session["DPMS.POP.POP_ExcelLeadIn_total"]);
        }
    }
    /// <summary>
    /// 当前进度
    /// </summary>
    private int cur
    {
        set
        {
            Session["DPMS.POP.POP_ExcelLeadIn_cur"] = value;
        }
        get
        {
            if (Session["DPMS.POP.POP_ExcelLeadIn_cur"] == null)
            {
                return 0;
            }
            return Convert.ToInt32(Session["DPMS.POP.POP_ExcelLeadIn_cur"]);
        }
    }
    /// <summary>
    /// 错误信息
    /// </summary>
    private string errMsg
    {
        set
        {
            Session["DPMS.POP.POP_ExcelLeadIn_errMsg"] = value;
        }
        get
        {
            if (Session["DPMS.POP.POP_ExcelLeadIn_errMsg"] == null)
            {
                return string.Empty;
            }
            return Session["DPMS.POP.POP_ExcelLeadIn_errMsg"].ToString();
        }
    }
    /// <summary>
    /// 开始时间
    /// </summary>
    private DateTime startTime
    {
        set
        {
            Session["DPMS.POP.POP_ExcelLeadIn_startTime"] = value;
        }
        get
        {
            if (Session["DPMS.POP.POP_ExcelLeadIn_startTime"] == null)
            {
                return DateTime.Now;
            }
            return Convert.ToDateTime(Session["DPMS.POP.POP_ExcelLeadIn_startTime"]);
        }
    }
    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(function () {
                $.ajax({
                    url: "ExcelLeadIn.aspx?action=getProcess&t=" + new Date().valueOf(),
                    type: "POST",
                    data: {},
                    success: function (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 = string.Empty;
    
        if (Request["action"] == "getProcess")
        {
            try
            {
                LoginEntity loginUser = (LoginEntity)this.Session[BasePage.LOGIN_USER_KEY];
                string userId = loginUser.USER_ID;
                if (string.IsNullOrEmpty(errMsg))
                {
                    if (total == 0)
                    {
                        result = "导入进度:0%";
                    }
                    else
                    {
                        DateTime now = DateTime.Now;
                        TimeSpan ts = now - startTime;
    
                        string time = string.Empty;
                        double per = cur / total;
                        if (per > 0)
                        {
                            double totalSeconds = ts.TotalSeconds / per - ts.TotalSeconds;
                            if (totalSeconds > 60)
                            {
                                time = (int)Math.Round(totalSeconds / 60) + "";
                            }
                            else
                            {
                                time = (int)Math.Round(totalSeconds) + "";
                            }
                        }
    
                        string percent = (cur / total * 100).ToString("0.00");
                        if (percent == "100.00")
                        {
                            cur = 0;
                            total = 0;
                            result = string.Format("导入进度:{0}%", percent);
                        }
                        else
                        {
                            result = string.Format("导入进度:{0}%,剩余时间:{1}", percent, time);
                        }
                    }
                }
                else
                {
                    result = "错误:" + errMsg;
                }
            }
            catch (Exception ex)
            {
                result = "错误:" + ex.Message;
            }
        }
    
        if (!string.IsNullOrEmpty(result))
        {
            Response.Write(result);
            Response.End();
        }
    }
    View Code

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

  • 相关阅读:
    Python Day7(相关补充)
    Python Day7
    Python Day6
    Python Day5
    Python Day4
    Python Day3
    Python Day2
    Python Day1
    复杂装饰器原理分析
    Unity 坐标
  • 原文地址:https://www.cnblogs.com/s0611163/p/5550391.html
Copyright © 2020-2023  润新知