// 以下代码为从DataGrid读取数据并复制到Excel的对应Cell的代码。
// 但复制过程并不在DataGrid的CaptionText上显示,只有当复制完后才显示,为什么?int row_index = 1;
for(int row = 0; row < row_cnt; row++)
{
  dataGrid1.CaptionText = "正在导出:" + (row + 1) + "/" + row_cnt;
                       
  colIndex=1;
  for(int col = 0; col < col_cnt; col++)                  
  {                              
    excel.Cells[rowIndex,colIndex] = dataGrid1[row, col];
    colIndex++;
  }
  rowIndex++;                        
}
 

解决方案 »

  1.   

    int row_index = 1;
    for(int row = 0; row < row_cnt; row++)
    {
      dataGrid1.CaptionText = "正在导出:" + (row + 1) + "/" + row_cnt;
        System.Windows.Forms.Application.DoEvents();
                      
      colIndex=1;
      for(int col = 0; col < col_cnt; col++)                  
      {                              
        excel.Cells[rowIndex,colIndex] = dataGrid1[row, col];
        colIndex++;
      }
      rowIndex++;                        
    }
      

  2.   

    在网页上实时显示进度是一个比较复杂的问题
    你这段代码运行的时候是在服务器端,这时HTML代码还没有到客户端,等你的程序运行完后HTML才发到客户端,所以客户看不到中间的过程
      

  3.   

    注:Winform
    DoEvents()
    处理当前在消息队列中的所有Windows消息。当运行Windows窗体时,它将创建新窗体,然后该窗体等待处理事件。该窗体在每次处理事件时,均将处理与该事件关联的所有代码。所有其他事件在队列中等待。在代码处理事件时,应用程序并不响应。如果在代码中调用DoEvents,则应用程序可以处理其他事件。
    如果从代码中移除DoEvents,那么在按钮的单机事件处理程序执行结束以前,窗体不会重新绘制。通常在循环中使用该方法来处理消息。
      

  4.   

    Application类
    提供静态方法和属性以管理应用程序,例如启动和停止应用程序、处理 Windows 消息的方法和获取应用程序信息的属性。不能继承此类。Application 类具有用于启动和停止应用程序和线程以及处理 Windows 消息的方法。调用 Run 以便在当前线程上启动应用程序消息循环,并可以选择使某窗体可见。调用 Exit 或 ExitThread 来停止消息循环。当您的程序在某个循环中时,调用 DoEvents 来处理消息。不能创建该类的实例。