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"]); } }
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>