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.

¿Fue útil?

Solución

  1. Agregue un control Timer a su formulario. (Está en la categoría de componentes)
  2. Establezca su propiedad Interval en 45000 (el valor representa milisegundos)
  3. Establezca la propiedad Enabled del temporizador en True en el diseñador de formularios o en algún lugar de su código.
  4. Agregue un controlador para el evento Tick del temporizador (puede obtenerlo haciendo doble clic en el temporizador)
  5. Dentro del controlador Tick , actualice su dataGridView

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.

DataTable.Merge

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top