locked
Actualizar DataSet con los valores que hay en base de datos RRS feed

  • Pregunta

  • Hola, a ver si por favor me podrían echar una mano, seguro que es una tontería pero me estoy volviendo loco.

    Tengo un programa windows desarrollado en C# que genera unos informes rdlc cargado con reportViewer. A través del rdlc se ha generado automáticamente un DataSet donde le he indicado qué tablas tiene que cargar y el informe se carga perfectamente. Hasta aquí bien. No domino demasiado bien esta forma de leer offline por lo que confío que esté bien el código que se genera automáticamente...

    El problema que tengo es que cuando posteriormente actualizo la base de datos desde otra parte del programa, el DataSet (y por ende el reportViewer) sigue teniendo los datos antiguos y no tiene en cuenta las actualizaciones efectuadas en la base de datos salvo que reinicie el programa.

    Ya sé que tiene que ver que DataSet hace un tratamiento offline y no se actualiza solo, lo que querría hacer es reiniciar ese DataSet para que vuelva a coger los datos actualizados de la base de datos antes de abrir el reporte. 

    He probado con la propiedad Reset() del Dataset, con la Update(), GetData() y Fill() del TableAdapter y nada, siguen saliendo los mismos registros que cuando se inicia el programa, sin tener en cuenta los cambios.

    Muchísimas gracias

    miércoles, 26 de febrero de 2014 11:49

Respuestas

  • Ahora le doy al botón del programa y se abre un nuevo form con un reporte rdlc y me aparecen los registros "A","B" y "C"

    pero ese dataset en que momento lo cargaste ? porque debiste hacerlo cuando presionaste el boton que abre el reporte

    una duda la db access esta integrada en el proyecto ? si es asi cuando eliminas ese registro "C" lo haces en la db que se copia al \bin\Debug ? porque es alli donde el VS esta realizando las modificaciones ya que crea una copia cuando ejecutas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta bracular miércoles, 26 de febrero de 2014 12:46
    miércoles, 26 de febrero de 2014 12:37

Todas las respuestas

  • hola

    pero el reporte lo lanzas en un form separado? porque si lo hicieras el usuario podrias cerrar ese form y volver arirlo con lo cual recargarias los datos ejecutando nuevamente la query y por consiguiente se verian los nuevos datos en el reporte

    si el reportviewer los pones en el mismo form no pudiendo cerrarlo, podrias definir algun boton de refrescar el cual vuelve a ejecutar la query, recarga el dataset y le asigna esto al ReportDocument para asignarlo a reportviewer

    a donde apunto es que la forma de actualizar es volviendo a consultar la db y recargando el dataset, para luego asignar una nueva instancia del reportdocument

    tienes que volver a lanzar nuevamente el mismo codigo que usaste la primer vez para generar el reporte

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de febrero de 2014 12:04
  • Hola, gracias por tu respuesta.

    Te digo... y te pongo un ejemplo claro

    Yo cargo el programa con una tabla en base de datos que tiene tres registros, "A","B" y "C".

    - Abro el programa (sin abrir el reporte), a continuación con el programa abierto modifico la tabla directamente en access eliminando "C", quedando "A" y "B" en la base de datos.

    - Ahora le doy al botón del programa y se abre un nuevo form con un reporte rdlc y me aparecen los registros "A","B" y "C" cuando en la base de datos sólo están "A" y "B". Para que me aparezcan sólo "A" y "B" tengo que reiniciar el programa.

    El DataSet que manda los datos al reportViewer lo ha creado visual studio sólo con el asistente, por lo que no sé cuándo leches se crea ese DataSet, es como si se cargara al iniciar el programa. Lo que necesito saber es cómo puedo actualizar los datos de ese DataSet para que vuelva a leer los valores iniciales de la base de datos.

    Mil gracias


    miércoles, 26 de febrero de 2014 12:22
  • Ahora le doy al botón del programa y se abre un nuevo form con un reporte rdlc y me aparecen los registros "A","B" y "C"

    pero ese dataset en que momento lo cargaste ? porque debiste hacerlo cuando presionaste el boton que abre el reporte

    una duda la db access esta integrada en el proyecto ? si es asi cuando eliminas ese registro "C" lo haces en la db que se copia al \bin\Debug ? porque es alli donde el VS esta realizando las modificaciones ya que crea una copia cuando ejecutas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta bracular miércoles, 26 de febrero de 2014 12:46
    miércoles, 26 de febrero de 2014 12:37
  • Resuelto!

    Muchísimas gracias por abrirme los ojos!

    El problema estaba en que tengo integrada la base de datos en el proyecto pero tengo puesta una ruta fija para el acceso a la base de datos Access desde el programa, y el ReportViewer crea un DataSet con un "conectionString" con referencia al directorio de la aplicación, por lo que al abrir la aplicación desde Visual Studio en el programa se actualizaban los datos en una base de datos pero mostraba los datos de otra (en la carpeta Debug). Por ello al reiniciar la aplicación los datos aparecían bien...porque volvía a copiar la base de datos "modificada" en la carpeta Debug.

    Mil gracias Leandro.

    • Propuesto como respuesta CastanedaVE viernes, 9 de marzo de 2018 20:44
    miércoles, 26 de febrero de 2014 12:52
  • MIL GRACIAS ME ACLARASTE LA DUDA QUE TENIA!! EXCELENTE LEANDRO EL MEJOR
    jueves, 8 de marzo de 2018 19:50