none
Crear informes locales RDLC con Visual Studio y WPF RRS feed

  • Pregunta

  • Estoy intentando localizar algún manual o libro que explique todos los elementos que intervienen en este tipo de informes, y lo único que encuentro hasta ahora son los ejemplos sencillos que utilizan el asistente, pero necesito respuestas para otras cuestiones como las que os indico:

    - Existe alguna regla que deben cumplir los DATASET, porque en caso contrario en muchos casos bastaría con hacer un JOIN gigante uniendo todas las tablas y se podría utilizar un solo DataSet para todos los informes.

    - El TableAdapter permite crear muchas consultas posicionándose sobre el y con el botón derecho del ratón elegir agregar consulta, pero como se accede a esas consultas desde código.´

    - Entra las muchas cosas que he encontrado, una de ellas me habla de la posibilidad de utilizar como origen de datos un método que devuelva un IEnumerable<objetos> esto estaría muy bien porque te quitas DataSet, TableAdapter etc. pero conocéis algún ejmplo de como se hace ?

    - Los informes incluyen un conjunto de operadores para utilizar con los campos y presentar expresiones en pantalla pero tampoco encuentro a nadie que hable de ellos.

    después de todo este rollo, la pregunta es conocéis algún buen enlace o libro que pueda ayudarme a entender esto de forma rápida aunque sea por AMAZON.

    un saludo

      

    lunes, 24 de agosto de 2015 12:08

Respuestas

Todas las respuestas

  • - Existe alguna regla que deben cumplir los DATASET, porque en caso contrario en muchos casos bastaría con hacer un JOIN gigante uniendo todas las tablas y se podría utilizar un solo DataSet para todos los informes.

    OJO, que en el contexto de RDLC con Visual Studio "DataSet" significa dos cosas distintas: Por una parte están los datasets que utiliza la definición del informe, y que básicamente tienen una lista secuencial de columnas que se pueden usar en el informe. No habría problema en que tengan columnas de sobra aunque no se usen en el informe (salvo la mayor ocupación de memoria y la merma de rendimiento).

    Por otra parte tienes el DataSet de System.Data en .Net. Este dataset puede ser tipado o no tipado, generarse desde un tableadapter o cargarse con un dataadapter, etc. En el contexto del que estamos hablando, típicamente se usa para alimentar al DataSet del report (aunque no es la única forma de alimentarlo). Sí que podrías hacer un Join con muchas tablas, pero perderías eficiencia y resultaría más lento que si se accede exclusivamente a los datos requeridos por cada informe. Ojo con el Join, que según como lo hagas puede generar más filas que si no hicieras el join (si hay varios registros en una de las tablas que no usas), o generar registros de menos si haces un inner join y en una de las tablas no hay correspondencia.

    - El TableAdapter permite crear muchas consultas posicionándose sobre el y con el botón derecho del ratón elegir agregar consulta, pero como se accede a esas consultas desde código.´
    Si al generar la consulta le pediste que hiciera tanto el Fill como el GetData, se ejecuta poniendo midatatable = eltableadapter.GetDataNombre(parámetros) o bien eltableadapter.FillNombre(midatatable, parámetros), siendo "Nombre" el nombre que pusiste al generar la consulta.
    lunes, 24 de agosto de 2015 17:43
  • Gracias Alberto aclaradas las consultas, pero aun no me queda muy claro el tema del DataSet, tomemos por ejemplo el caso de un enfermo y su ficha en un hospital, es decir las tablas Paciente y Tratamientos, y que remos hacer un informe con los datos personales del paciente en cabecera y luego una tabla con todos los tratamientos debajo, tengo claro que si hago un JOIN entre las dos tablas van a aparecer varias filas, y los datos personales van a estar duplicados, pero yo ese informe lo haría con los campos de los datos personales en cabecera prefijados con el prefijo FIRST(FIELD ....) mientras que los tratamientos los situaría en el contenido del informe en una tabla.

    y a eso me refiero con reglas de si eso se puede o no hacer o hay que hacer querys concretas, o utilizar consultas distintas para cada parte, también veo que un informe puede contener varios DataSet, por eso busco algo que explique todas las posibilidades (Subreports ...) y lo encuentro para Reporting Services (*.rdl) creados para Report Manager pero nada para RDLC.

    un abrazo

    lunes, 24 de agosto de 2015 18:33
  • Hola:

     Te recomiendo le des una leida a este articulo que escribi ya hace algun tiempo:

    http://joseluisgarciab.blogspot.mx/2013/10/reportviewer-y-rdlc-ejemplo-facturacion.html

     En el abordo el tema de los RDLC's pero sin usar DataSet y en su lugar usar List Genericas de Propiedades que son mucho mejores y mas dinamicas que los DataTables y DataSet.

     En este articulo explico como diseñar el reporte desde cero y  de como pasarle el origen de datos de forma dinamica.


    Saludos desde Monterrey, Nuevo León, México!!!

    • Marcado como respuesta fjjcent martes, 25 de agosto de 2015 15:38
    lunes, 24 de agosto de 2015 19:53
  • Muy bueno José Luis has sido la respuesta a mis plegarias, aun no lo he terminado completo aunque estuve con el manual ayer hasta las 2 de la madrugada, pero sin tu blog no se que hubiera hecho, ni te imaginas lo que lo necesitaba, de nuevo gracias.
    martes, 25 de agosto de 2015 15:38
  • Gracias Alberto por tu ayuda, pero necesitaba más datos y el blog de José Luis respondió a todas mis preguntas, sobre todo a la posibilidad que ya conocía por libros de hacer los informes directamente con consultas que devuelven IEnumerables, lo había leído en libros pero no había visto ningún ejemplo y así te quitas la rigidez de los DataSet / DataTables /TableAdapters etc.

    un saludo

    martes, 25 de agosto de 2015 15:42
  • Muy interesante tu artículo, y lo voy a utilizar de inmediato, solo me falta un detalle, como yo trabajo en WPF y el informe está incrustado en un WindowsFormHost y no tengo forma de acceder al cuerpo del ReportView y decirle cual es el informe que quiero imprimir, y la pregunta es como se puede asignar el informe mediante código 

    un saludo

    miércoles, 26 de agosto de 2015 17:13