2

我一直在看很多关于进度条的例子,这些例子让我自己感到困惑。

在我的项目中,我有一个 excel.png 图标,单击该图标会运行一个将表格数据导出到 excel 的页面。

如您所知,编译和导出数据可能需要大约 30 秒以上的时间。这是足够的时间让用户开始单击其他项目,因为没有任何迹象表明正在发生任何事情。

解决方案当然是一个进度指示器,并且有很多例子展示了如何构建进度指示器。但是,我看不到如何在我的项目中使用该指标,我的困难在于将代码放在哪里以及它的外观。

我将数据导出到 excel 的页面称为 GenSRPFLens.cshtml:

 @{    
      Layout = null;    

      var appData = Server.MapPath("~/App_Data");    
      var originalFileName = "orgSRPLens.xls";    
      var newFileName = string.Format("{0}.xls", Guid.NewGuid().ToString());    
      var originalFile = Path.Combine(appData, originalFileName);    
      var newFile = Path.Combine(appData, newFileName);    
      File.Copy(originalFile, newFile);

      var lenscat =Database.Open("A-LensCatFE-01SQL");
      var CustomerCode = !UrlData[0].IsEmpty()?UrlData[0]:"1";

      var sql = "Select * from dbo.qryDiscountLensPrice WHERE CustomerCode=@0 Order by LensForm, LensCode";
      var srplensdata = lenscat.Query(sql, CustomerCode);

      var connString = string.Format(@"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0}/{1};Extended Properties='Excel 8.0;HDR=Yes;'", appData, newFileName);    
      var provider = "System.Data.OleDb";    
      using (var SRPLens = Database.OpenConnectionString(connString, provider)){
          sql = @"INSERT INTO [Sheet1$] (CustomerCode,  LensCode, LensForm, ShortName, Description, [Index], Discount, LensMultFactor, DispensingFee, VAT, VATRate, SRPBasedOn, iScription, Cost, DiscountPrice, NoVATprice, AddVAT, SRP)           
                VALUES (@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13,@14,@15,@16,@17)";

    foreach(var LensCode in srplensdata){            
       SRPLens.Execute(sql, 
       LensCode.CustomerCode,                
       LensCode.LensCode,                
       LensCode.LensForm,                 
       LensCode.ShortName,                 
       LensCode.Description,                 
       LensCode.Index,  
       LensCode.Discount,
       LensCode.LensMultFactor,
       LensCode.DispensingFee,
       LensCode.VAT,
       LensCode.VATRate,
       LensCode.SRPBasedOn,    
       LensCode.iScription,           
       LensCode.Cost,                 
       LensCode.DiscountPrice,
       LensCode.NoVATPrice,
       LensCode.AddVAT,
       LensCode.SRP);        
        }    
        }    
        Response.AddHeader("Content-disposition", "attachment; filename=SRPFLens.xls");    
        Response.ContentType = "application/octet-stream";    
        Response.TransmitFile(newFile);    
        Response.Flush();    
        File.Delete(newFile);    
        Response.End();


}

调用上述页面的部分在一个名为 DiscountCustomers.cshtml 的页面中:

<img src="/images/ExcelIconGreen25x25.png" id="SRPLens" alt="Export SRP Lens" title="Export SRP F Data to Excel: Lens" />

@section script{   
<script type="text/javascript">
        $(function () {
        $('#SRPLens').live('hover', function () {
            $(this).css('cursor', 'pointer');
        });
        $('#SRPLens').live('click', function ()  {
            $('<iframe src=@linkSRPFLens></iframe>').appendTo('body').hide();        
        });
    });
</script>

我有一个名为progressbarT2.css 的进度条.css 文件:

#progressBar {
        width: 150px;
        height: 8px;
        border: 1px solid #111;
        background-color: #fff;
        float: left;    margin-top: 10px;    margin-left: 20px; 
        visibility: visible;

}
#progressBar div {
        height: 100%;
        color: #fff;
        text-align: right;
        line-height: 7px; /* same as #progressBar height if we want text middle aligned */
        width: 0;
        background-color: #b200ff;

}

然后我被卡住了,有太多的例子,我无法理解代码应该是什么以及应该放置在哪里才能让它工作。需要您的指导,谢谢。

4

1 回答 1

1
<div id="progressBar"> <div>

CSS:

#progressBar {
    width: 400px;
    height: 22px;
    border: 1px solid #111;
    background-color: #292929;
}



#progressBar div {
        height: 100%;
        color: #fff;
        text-align: right;
        line-height: 22px; /* same as #progressBar height if we want text middle aligned */
        width: 0;
        background-color: #0099ff;
}

js:

  function progress(percent, $el) {
            var progressBarWidth = percent * $el.width() / 100;
            $el.find('div').animate({ width: progressBarWidth }, 500).html(percent + "%&nbsp;");
        }

  var globalP = 0;

        var startProgressBar = function(){
            if(globalP < 100){
                globalP = globalP + 1;
                progress(globalP, $('#progressBar')); 
                setTimeout(startProgressBar, 500); 
            }
            else {
                //done
            }
        }

        $(document).ready(function(){
            startProgressBar();
        })

完整的要点:

https://gist.github.com/railscash/5804857

于 2013-06-18T11:37:54.307 回答