2009-04-28 51 views
5

Tengo una función de importación para una hoja de cálculo de Excel dentro de una aplicación. Utiliza el control FileUpload en este momento. Subo el archivo, luego ejecuto una operación en ese archivo. Quiero informar al usuario de la operación que se está realizando y el porcentaje que se realiza. Me imagino que puedo tomar el número total de filas que extraje de la hoja de cálculo de Excel, y dividirme continuamente a medida que inserto cada registro en la base de datos y actualizo una barra de progreso.barra de progreso ASP.NET AJAX: ¿actualización del código?

El problema es que parece que no puedo encontrar ninguna solución que actualice una barra de progreso del código subyacente. Intenté usar Matt Berseth's solution.

Es muy agradable de ver, pero no veo cómo funciona desde el código subyacente. Teóricamente, pensé que poner un valor en un cuadro de texto en la página, y establecer el cambio a una función de JavaScript para establecer el porcentaje funcionaría como una prueba, pero incluso eso no me dio los resultados deseados.

¿Alguna sugerencia sobre cómo se puede hacer esto?

Respuesta

1

Lo que debe saber es que no puede verificar el estado de la carga de un archivo utilizando el control FileUpload estándar. Lo que puede hacer es cargar el archivo en el servidor y luego conectarse a él usando ODBC y comenzar a leer e insertar líneas en su base de datos asincrónicamente (haciendo una solicitud de AJAX a una página o usando un servicio de script).

En cuanto a la barra de progreso, simplemente debe usar una barra de progreso de CSS (puede encontrar un ejemplo simple en: http://css-tricks.com/examples/ProgressBars/).

A continuación, se debe construir un servicio de la escritura (usando un serivice web) con un método que puede devolver el estado de su progreso desde el servidor:

Tu * archivo .asmx debe contener algo como:

[WebMethod] 
public int GetStatus() 
    { 
     int progress = 0; // in percents 
     // your server-side code here 
     return progress; 
    } 

Su página aspx debe contener algo como:

<asp:ScriptManager runat="server" ID="ScriptManager"> 
<Services> 
    <asp:ServiceReference Path="~/services/import.asmx" InlineScript="false" /> 
</Services> 
</asp:ScriptManager> 

Entonces, usted debe ser capaz de llamar a ese método de JavaScript periódicamente (cada segundo durante examp le, usando setTimeout) y actualizar el ancho de la barra de progreso con una simple JavaScript o jQuery:

var tout, service; 

function UpdateStatus() { 
    if (tout != null) 
     clearTimeout(tout); 

    if (service == null) 
     service = new namespace.here.serice_class_here(); 

    service.GetStatus(onSuccess, onFailure);  
} 

function onSuccess(result) { 
    // update the width of the progress with result (the integer value of the progress) 
    progress_bar.style.width = percent + "%";   

    // call the method again 
    tout = setTimeout("UpdateStatus()", 1000); 
} 

function onFailure(error) { 
    alert(error.get_message()); 
} 

Se podría extender su función onSuccess JavaScript y cuando el progreso es completa (valor devuelto es 100%) puede redirigir al usuario otra página o mostrar una información o un botón según sus necesidades.

Espero que esto ayude!

Cuestiones relacionadas