Progress bar reutilizable

(1/2) > >>

emmanuelgc17:
Tengo una solución en C Sharp con 4 capas o proyectos (Datos, Entidades, Negocio y Presentación). Las primeras tres son proyectos de Biblioteca de Clases y la ultima es de Windows Forms.

En el poyecto presentacion tengo un formulario donde el usuario puede elegir un archivo de excel y se muestra en un datagrid y el usuario selecciona que registros desea importar. Despues de seleccionar, solo da clic a un boton para iniciar la importacion.

Dentro de ese botón accedo a la capa negocios y desde la capa negocios accedo a la capa de datos donde hago toda la tarea de importacion con las siguientes acciones:

Paso 1. Me conecto a la base de datos
Paso 2. Recorro el datagrid a traves de un foreach y aqui ejecuto las sentencias SQL para insertar cada registro
Paso 3. Cierro la conexion.

Mi necesidad es que al estar insertando los registros en el formulario se muestre el progreso de la insercion o edicion de los registros

Se puede hacer esto y se puede podrán pasarme el codigo que debo poner?

Muchas gracias, espero me haya explicado. 

Danielㅤ:
Hola, ésto como lo estás haciendo es un error:

Cita de: emmanuelgc17 en 24 Enero 2024, 04:44 am

Paso 2. Recorro el datagrid a traves de un foreach y aqui ejecuto las sentencias SQL para insertar cada registro


porque con cada dato que estés ingresando en el datagrid estás haciendo una consulta/query a la base de datos, lo cuál es una sobrecarga innecesaria y excesiva, en estos casos lo correcto y recomendable es primero hacer una sola consulta a la base de datos y guardar todos los datos en una variable luego ahí si hacer el foreach para ir añadiendo todos los datos al datagrid.

En cuánto a la barra de progreso claro que es posible hacerla y no es difícil, tenés que contar todos los elementos que vas a ingresar al datagrid y con ese total (rango) podes crear la barra para indicarle a tu programa cuál será el final del progreso, por ultimo cuándo hagas el foreach en tu datagrid para agregar los datos ahí vas sumando un valor (set value) a la barra por cada iteración.


Saludos

emmanuelgc17:
Buenas tardes.

Una disculpa que no haya respondido antes.

Podras pasarme el codigo de como se hace lo del progres bar en el proyecto de biblioteca de clases (osea en la capa de datos) y que al mismo tiempo el usuario lo vea en la capa presentacion (en el formulario).

Te lo agradeceria mucho.

Gracias.

Serapis:
Cita de: emmanuelgc17 en 29 Enero 2024, 23:26 pm

Podras pasarme el codigo de como se hace lo del progres bar en el proyecto de biblioteca de clases (osea en la capa de datos) y que al mismo tiempo el usuario lo vea en la capa presentacion (en el formulario).

Te lo agradeceria mucho.

Es un poco irrelevante poner código. Una explicación para algo tan sencillo es más que suficiente...

En la biblioteca, simplemente añades una clase que ampare 3 propiedades (Max, Min y Value), un evento ('ValueChanged(valor)') y un método 'Reset (max, valor=-1, min=0)

Cuando vayas a usarlo, invocas el método 'Reset, para pasar el valor máximo del progressBar, el mínimo (por defecto 0) y el valor inicial (-1 indicaría que tome el valor mínimo sea éste cual sea).
Después mientras actúa, simplemente vas cambiando el valor (si el incremento es siempre unitario, puede remplazar la propiedad 'set Valor' por un método 'increment()' que simplemente sume uno al valor actual: _Valor +=1
...y acto seguido dispare el evento ValueChanged, evento al que está suscrito la interfaz y que modifica el valor de progresbar1.value = valor

Quizás fuere conveniento otro evento de 'finalizado(max)', que sucedería cuando valor = max, es decir en esta condición dispararía 'finalizado' en vez de 'valuechanged', en el código de la interfaz se haría: progressbar1.value = max, y ahí (tras ese código en el evento recibido), haces otras cosas que sean las naturales al término de la tarea.

elektrostudios2:
Cita de: Serapis en  6 Febrero 2024, 15:44 pm

Es un poco irrelevante poner código. Una explicación para algo tan sencillo es más que suficiente...

En la biblioteca, simplemente añades una clase que ampare 3 propiedades (Max, Min y Value), un evento ('ValueChanged(valor)') y un método 'Reset (max, valor=-1, min=0)

Cuando vayas a usarlo, invocas el método 'Reset, para pasar el valor máximo del progressBar, el mínimo (por defecto 0) y el valor inicial (-1 indicaría que tome el valor mínimo sea éste cual sea).
Después mientras actúa, simplemente vas cambiando el valor (si el incremento es siempre unitario, puede remplazar la propiedad 'set Valor' por un método 'increment()' que simplemente sume uno al valor actual: _Valor +=1
...y acto seguido dispare el evento ValueChanged, evento al que está suscrito la interfaz y que modifica el valor de progresbar1.value = valor

Quizás fuere conveniento otro evento de 'finalizado(max)', que sucedería cuando valor = max, es decir en esta condición dispararía 'finalizado' en vez de 'valuechanged', en el código de la interfaz se haría: progressbar1.value = max, y ahí (tras ese código en el evento recibido), haces otras cosas que sean las naturales al término de la tarea.


@emmanuelgc17: Atendiendo de forma superficial a tu petición de "¿Podéis mostrarme un código?", permíteme decirte que si le entregas esas brillantes instrucciones de @Serapis a ChatGPT, y junto al generoso comentario de @Daniel, estoy convencido de que ChatGPT será capaz de elaborar un código que te permita hacerte mejor idea y adaptarlo a tu entorno.

La implementación de una barra de progreso reutilizable no supone un problema, pero el requisito de que la implementación (el código) se adapte especificamente a tu escenario / aplicación puede resultar tedioso y dar lugar a complicaciones, factores que no se toman en cuenta y posibles mal entendidos. En estos casos yo optaría por probar con ChatGPT, o proporcionarnos una muestra  clara y concisa del código relevante que estás utilizando.
 
Aténtamente,
Elektro.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente