¿Cómo se actualiza una vista de cuadrícula de datos en C # cada minuto?
-
03-07-2019 - |
Pregunta
Estoy trabajando en un proyecto en C # en este momento, que es bastante simple.
Tengo un cuadro de estado, dos botones y un DataGridView.
Cuando se carga el formulario, dataGridView se llena correctamente.
Lo que me gustaría hacer es actualizar esa tabla cada 45 segundos para reflejar los cambios en la base de datos.
Estoy buscando sugerencias sobre una técnica para lograr esto. He estado buscando información clara, pero parece algo deficiente.
Solución
- Agregue un control
Timer
a su formulario. (Está en la categoría de componentes) - Establezca su propiedad
Interval
en45000
(el valor representa milisegundos) - Establezca la propiedad
Enabled
del temporizador enTrue
en el diseñador de formularios o en algún lugar de su código. - Agregue un controlador para el evento
Tick
del temporizador (puede obtenerlo haciendo doble clic en el temporizador) - Dentro del controlador
Tick
, actualice sudataGridView
Su controlador se verá así:
private void timer1_Tick(object sender, EventArgs e)
{
// Update DataGridView
}
Si necesita suspender las actualizaciones por algún motivo, puede llamar a timer1.Stop ()
para detener la ejecución del temporizador y usar timer1.Start ()
para ponlo en marcha de nuevo.
Otros consejos
Como otros han sugerido, use un temporizador para volver a consultar la base de datos. Lo único que me gustaría agregar es que cuando vuelva a consultar la base de datos, no solo configure el origen de datos de DataGridView en la nueva tabla. Más bien, combínelo con la tabla existente. La razón de esto es porque si el usuario está en el medio de la cuadrícula, por ejemplo, mirando una fila en particular, si restablece DataSource a una nueva tabla, toda la cuadrícula se actualizará y perderá su lugar. Molesto como el infierno! Sin embargo, si la fusiona , será transparente para el usuario.
Lo único que debe tener en cuenta al utilizar el método Merge es que la tabla debe tener una clave principal. Verifique dos veces para asegurarse de que el DataTable tenga una clave principal. No siempre lo retira de la base de datos. Es posible que deba hacer algo como:
table.PrimaryKey = new DataColumn[] {table.Columns["ID"]};
Use un control de temporizador y luego realice sus actualizaciones en los incrementos específicos que necesite.
Puede crear un Temporizador que se dispara cada 45 segundos y actualiza su IU desde su controlador de eventos.
¿quiere decir que debería vincular datagridview nuevamente en el controlador de eventos Timer?