NET导入Excel带进度条。

【概述】几乎每个企业都有自己的核心东西或说是框架性的东西,框架的好处是将我们经常要使用的功能,控件等包装一个个
易于使用的单元,就算是初学者也极其容易上手,减少项目的开发成本。因此框架的重要性和好处是不言而喻的。在我的这个系列
(一点一滴打造我们自己的web开发框架系列 )当中,我将自己在开发过程中用到的一些东西陆续公布出来,和大家一起交流学习。

  这次我们接着本框架系统的开发进展,将我们上一节开发的客户端进度条包装成一个服务器控件,方便以后的使用。上次我们开发
的进度条是通过setInterval来自动滚动进度条的,但是有时候比如我们要导入数据,我们知道总共要导入的数据,及当前我们正在导入
的数据,这时候我们可以手动来设置这个进度条的提示信息和进度条的前进。因此在上节的基础上,对ProgressBar.js稍微做了下扩展,
添加了两个属性:

this.TickCount = typeof (tickCount) == ‘undefined‘ ? 100 : tickCount;
this.StepManually = false; //是否手动设置前进
 TickCount为步进的次数,在实际应用中可以指定为总共要导入的数据条数等。

并添加了响应的事件:

代码
step: function(currentStep) {
    var currentWidth = window.Progress._progrss.style.pixelWidth;
    if (currentStep < window.Progress.TickCount) {
        window.Progress._progrss.style.width = currentWidth + window.Progress._tickWidth + "px";
        window.Progress._innerDown.innerText = window.Progress.TipMessage;
        window.Progress._mark.style.display = "block";
    }
    else {
        if (window.Progress.CompleteEvent != null) {
            if (typeof window.Progress.CompleteEvent == ‘function‘)
                window.Progress.CompleteEvent.call();
            else
                eval(window.Progress.CompleteEvent);
        }
    }
},

_getTickWidth: function() {
    var totalWidth = this._inner.style.pixelWidth;
    var currentWidth = this._progrss.style.pixelWidth;
    var tickWidth = this._round((totalWidth - currentWidth) / this.TickCount, 0);
    return tickWidth;
},

完善客户端事件后,我们将每个公开的属性包装成服务器控件的属性。然后在onPreRender事件中注册相应的初始化脚步:

代码
[ToolboxData("<{0}:ProgressBar runat=server></{0}:ProgressBar>")]
    public class ProgressBar:WebControl
    {
        /// <summary>
        /// 进度条存活时间
        /// </summary>
        [Bindable(true), Browsable(true), DefaultValue(10), Description("进度条存活时间")]
        public int AliveSeconds
        {
            get
            {
                if (ViewState[this.ID + "_AliveSeconds"] != null)
                    return (int)ViewState[this.ID + "_AliveSeconds"];

                return 10;
            }
            set
            {
                ViewState[this.ID + "_AliveSeconds"] = value;
            }
        }

        /// <summary>
        /// 每次滚动条的步长
        /// </summary>
        [Bindable(true), Browsable(true), DefaultValue(2), Description("自动前进时要前进的步长")]
        public int TickWidth
        {
            get
            {
                if (ViewState[this.ID + "_TickWidth"] != null)
                    return (int)ViewState[this.ID + "_TickWidth"];

                return 2;
            }
            set
            {
                ViewState[this.ID + "_TickWidth"] = value;
            }
        }
        /// <summary>
        /// 手动前进时要前进的步数
        /// </summary>
        [Bindable(true), Browsable(true), DefaultValue(100), Description("手动前进时要前进的步数")]
        public int TickCount
        {
            get
            {
                if (ViewState[this.ID + "_TickCount"] != null)
                    return (int)ViewState[this.ID + "_TickCount"];

                return 100;
            }
            set
            {
                ViewState[this.ID + "_TickCount"] = value;
            }
        }
        /// <summary>
        /// 是否手动来设置前进的值
        /// </summary>
        [Bindable(true), Browsable(true), DefaultValue(false), Description("是否手动来设置前进的值")]
        public bool StepManually
        {
            get
            {
                if (ViewState[this.ID + "_StepManually"] != null)
                    return (bool)ViewState[this.ID + "_StepManually"];

                return false;
            }
            set
            {
                ViewState[this.ID + "_StepManually"] = value;
            }
        }
        /// <summary>
        /// 进度条100%时,要响应的客户端事件
        /// </summary>
        [Bindable(true), Browsable(true), DefaultValue(""), Description("进度条完成时要响应的客户端事件")]
        public string CompleteEvent
        {
            get
            {
                if (ViewState[this.ID + "_CompleteEvent"] != null)
                    return (string)ViewState[this.ID + "_CompleteEvent"];

                return "";
            }
            set
            {
                ViewState[this.ID + "_CompleteEvent"] = value;
            }
        }
        /// <summary>
        /// 提示信息
        /// </summary>
        [Bindable(true), Browsable(true), DefaultValue(""), Description("进度条的提示信息")]
        public string TipMessage
        {
            get
            {
                if (ViewState[this.ID + "_TipMessage"] != null)
                    return (string)ViewState[this.ID + "_TipMessage"];

                return "数据正在加载中......";
            }
            set
            {
                ViewState[this.ID + "_TipMessage"] = value;
            }
        }

        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            base.AddAttributesToRender(writer);
            writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
        }
        /// <summary>
        /// 呈现菜单
        /// </summary>
        /// <param name="writer"></param>
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);

            this.Page.ClientScript.RegisterClientScriptResource(this.GetType(), "Hjp.WebDesigner.WebControls.ProgressBar.ProgressBar.js");

            StringBuilder script = new StringBuilder();
            script.Append("/nvar " + this.UniqueID + " = new ProgressBar();/n");
            if (this.StepManually)
            {
                script.Append("" + this.UniqueID + ".StepManually=" + this.StepManually.ToString().ToLower() + ";/n");
                script.Append("" + this.UniqueID + ".TickCount=" + this.TickCount + ";/n");
                script.Append("" + this.UniqueID + ".CompleteEvent=/"" + this.CompleteEvent + "/";/n");
            }
            else
            {
                script.Append("" + this.UniqueID + ".AliveSeconds=" + this.AliveSeconds + ";/n");
                script.Append("" + this.UniqueID + ".TickWidth=" + this.TickWidth + ";/n");
                script.Append("" + this.UniqueID + ".CompleteEvent=/"" + this.CompleteEvent + "/";/n");
                script.Append("" + this.UniqueID + ".TipMessage=/"" + this.TipMessage + "/";/n");
            }
            this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.UniqueID, script.ToString(), true);
        }
    }
 客户端应用服务器控件:

<cc1:ProgressBar ID="ProgressBar1" runat="server"
    AliveSeconds="5"
    TickWidth="3"
    CompleteEvent="hide"
    TipMessage="loading..."/>

代码下载:http://files.cnblogs.com/jackhuclan/progressbar.rar

时间: 2024-10-10 14:44:36

NET导入Excel带进度条。的相关文章

带进度条的文件上传

Ajax技术——带进度条的文件上传 1.概述 在实际的Web应该开发或网站开发过程中,经常需要实现文件上传的功能.在文件上传过程中,经常需要用户进行长时间的等待,为了让用户及时了解上传进度,可以在上传文件的同时,显示文件的上传进度条.运行本实例,如图1所示,访问文件上传页面,单击“浏览”按钮选择要上传的文件,注意文件不能超过50MB,否则系统将给出错误提示.选择完要上传的文件后,单击“提交”按钮,将会上传文件并显示上传进度. 2.技术要点 主要是应用开源的Common-FileUpload组件来

atitit. 文件上传带进度条 atiUP 设计 java c# php

atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.xml 3 6. struts extand url 3 7. behide code 3 8. 简化设计 3 1. 设计要求 带进度条 完成提示动画效果.. 2. 原理and 架构 如果需要显示进度条,实时显示文件上传进度 需要使用Ajaxj技术..up到个在的iframe黑头.. 工作原理 其实际

atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传,避免一次使用内存使用过大的 2 2. Uuid还是原来文件名称:: 2 3. 监听器频繁地被调用 2 4. 结合wz easyui 2 4. 选型 2 5. Uploadify::yash js+flash 3 6. commons-fileupload:: 3 7. COS这个工具O'Reilly公司 3 8. 大的文件上传组件总结 3 5. 林吧实现ui Ajax+jq

自定义带进度条的WebView , 增加获取web标题和url 回掉

1.自定义ProgressWebView package com.app.android05; import android.content.Context; import android.graphics.Bitmap; import android.util.AttributeSet; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; /

C# WPF 解压缩7zip文件 带进度条 sevenzipsharp

vs2013附件 :http://download.csdn.net/detail/u012663700/7427461 C# WPF 解压缩7zip文件 带进度条 sevenzipsharp WPF PNG实现的图形进度条 .NET 3.5 http://sevenzipsharp.codeplex.com/ MainWindow.xaml <Window x:Class="SevenZipTestWPF.MainWindow" xmlns="http://schem

asp.net 文件批量选取,批量上传,带进度条,uploadify3.2 TOP

http://www.16aspx.com/Article/3444 asp.net 文件批量选取,批量上传,带进度条,uploadify3.2 TOP,布布扣,bubuko.com

赵雅智_android多线程下载带进度条

progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度.一个进度条也可不确定其进度.在不确定模式下,进度条显示循环动画.这种模式常用于应用程序使用任务的长度是未知的. XML重要属性 android:progressBarStyle:默认进度条样式 android:progressBarStyleHorizontal:水平样式 progressBar重要方法 getMax():返回这个进度条的范围的

带进度条的Webview

转帖: http://droidyue.com/blog/2014/07/12/ding-bu-dai-jin-du-tiao-de-webview/ 写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面. 示例图如下 主Activity代码 package com.droidyue.demo.webviewprogressbar; import android.app.Activity; import android.os.Bundle; import

PHP+ajaxForm异步带进度条上传文件实例

在使用ajaxForm方法之前,首先需要安装form.js的插件,网上有: 一.首先说用法,ajaxForm可以接收0或1个参数,该参数可以是一个变量.一个对象或回调函数,这个对象主要有以下参数: var object= {                     url:url, //form提交数据的地址   type:type,   //form提交的方式(method:post/get)   target:target, //服务器返回的响应数据显示的元素(Id)号