none
Problema al refrescar DataGridView RRS feed

  • Pregunta

  • Cordial saludo.

     

    En un windows forms tengo un DatagridView, el cual lleno manualmente, es decir, no tengo asociado a él ningún DataSet. Necesito que se actualice cada medio minuto, para lo cual he colocado un Timer con el intervalo en 30000ms.

    El problema es que no se me repinta el DataGridView cuando se cumple el tiempo. He hecho debug y el programa sí está entrando al evento Tick del timer, pero no actualiza el Datagrid. Alguna idea que me pueda servir?????

    Éste es el código que utilizo para que "actualice":

     

    private void FrmDisplay_Load(object sender, EventArgs e)
        {
          timerHoraActual.Start();
          timerRefrescarVentana.Start();
          CargarTabla();
          
        }
    
    /// <summary>
        /// Evento que controla la actualización de la ventana dependiendo del tiempo establecido.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timerRefrescarVentana_Tick(object sender, EventArgs e)
        {
          this.dataGridView1.Invalidate();
          this.dataGridView1.EndEdit();
          this.dataGridView1.Refresh();
          this.dataGridView1.Parent.Refresh();
        }
    

    Muchas gracias!

    miércoles, 24 de agosto de 2011 21:10

Respuestas

  • Ya he encontrado la solución. Dado que definitivamente no pude hacerlo como quería, modifiqué la lógica del programa de tal manera que se pudiera enlazar el DataGridView a un DataSet, haciendo muy sencillo el procedimiento:

     

    /// <summary>
        /// Evento que controla la actualización de la ventana dependiendo del tiempo establecido.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timerRefrescarVentana_Tick(object sender, EventArgs e)
        {          
          this.transmisionesTableAdapter.Fill(this.transmisionesDBDataSet.Transmisiones);
          this.dataGridView1.Refresh();   
        }
    

    Muchas gracias Leandro!

    • Marcado como respuesta Andrés Ayala jueves, 25 de agosto de 2011 2:08
    jueves, 25 de agosto de 2011 2:07

Todas las respuestas

  • pero actualziar con que ?

    o sea si poens registros estos aparecen a penas pasa por el Rows.Add() y ya vez la nueva row

    que necesitas refrescar ?

    o sea si se cambiaria un origen de datos, por ejemplo cargas un dataset y luego agregas nuevos registros a este, el refresh tomaria los cambiso que esten en este dataset, pero tu los agrrgas directo al control, que tendria que refrescar, me parece que no hay nada

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 24 de agosto de 2011 21:16
  • Algunos de los campos con los cuales se llena el DataGridView son producto de una consulta SQL que hago a una base de datos en SQL Server.... otros son producto de operaciones que realizo dentro del formulario, razón por la cual no puedo enlazar todo el DataGridView a una misma fuente de datos. Por eso no tengo ningún DataSet, y sé que es por eso que no me funciona el método Refresh() del DataGridView. 

    He intentado llamar dentro del evento Tick del Timer de nuevo al método CargarTabla(), que es el que llena el DataGridView, pero me adiciona las filas ya existentes.

    No existe una especie de Refresh() en el DataGridView que simplemente "Repinte" este control? básicamente eso es lo que necesito hacer.

     

    Gracias

     

     

    miércoles, 24 de agosto de 2011 21:42
  • Algunos de los campos con los cuales se llena el DataGridView son producto de una consulta SQL...otros son producto de operaciones que realizo dentro del formulario razón por la cual no puedo enlazar todo el DataGridView a una misma fuente de datos. Por eso no tengo ningún DataSet,

    y eso como lo logras, acasdo ponews en edicion asl celdas para escribir el valor del calculo ?

    el tema es que un dataset si tienes, si haces

    DataSet ds = DataGridView1.DataSource as DataSet;

    puede tomar el dataset oaiginal que usas te para cargar el grid

     

    cuando dices que quieres refrescar la info, es que quieres tmar nuevamente esta de la db ? porque si es asi deberias ejecutar el codigo que recarga el dataset para volver a asignar el DataSource del grid, solo asi se actualizara los datos, peor perderas los ingresos que realizaste de forma programatica en el propio grid

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 24 de agosto de 2011 23:21
  • Ya he encontrado la solución. Dado que definitivamente no pude hacerlo como quería, modifiqué la lógica del programa de tal manera que se pudiera enlazar el DataGridView a un DataSet, haciendo muy sencillo el procedimiento:

     

    /// <summary>
        /// Evento que controla la actualización de la ventana dependiendo del tiempo establecido.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timerRefrescarVentana_Tick(object sender, EventArgs e)
        {          
          this.transmisionesTableAdapter.Fill(this.transmisionesDBDataSet.Transmisiones);
          this.dataGridView1.Refresh();   
        }
    

    Muchas gracias Leandro!

    • Marcado como respuesta Andrés Ayala jueves, 25 de agosto de 2011 2:08
    jueves, 25 de agosto de 2011 2:07
  • exacto eso es a donde apuntaba, debes recargar los datos para que se actualicen

    podrias usar el Refresh o sino:

     this.transmisionesTableAdapter.Fill(this.transmisionesDBDataSet.Transmisiones);      

    this.dataGridView1.DataSource = transmisionesDBDataSet.Transmisiones; 

    por eso habia mencionado el DataSource, pero seria basicamente lo mismo

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 25 de agosto de 2011 2:18