none
Clase para generar reportes.

    Pregunta

  • Hola nuevamente,

    Ahora me estoy enfrentando a algo medio dificil para mi, pues quiero generar una clase que me permita generar reportes, la idea es que tengo un datagrid y de este data grid lleno un dataset y con este lleno un reporte, ahora si tengo muchos datagrids y quiero generar un reporte con cada uno de ellos, se me ocurrio hacer una clase, pero ahora como le paso el datagrid a la clase con toda su información que esta la lea y que me devuelva el reporte de este datagrid... ahora segun se los reportes los sacamos desde un data set pero pues ahora no se como omitir este o hacer que se llene con distintas columnas de los diversos datagrid...

    Mi código para generar el reporte desde un data grid es el siguiente:

    DataSet

    ds = new DataSet();

    ds = clsReportes.Reportes(pantalla, tiporeporte, IdSucursal, valorFecha, Fecha1, Fecha2, valorUser, Usuario);

    dgvReporte.DataSource = ds.Tables[0];

    

     

    private Productividad.dt_PrevAdj GeneratRptPrevAdj()

    {

                   Productividad.dt_PrevAdj RptPrevAdj = new AppCallCenterDEMEXSOFT.Productividad.dt_PrevAdj();

               foreach (DataGridViewRow row in dgvReporte.Rows)

                 {

                       Productividad.

    dt_PrevAdj.dt_PrevAdjRow rowrptPrevAdj = RptPrevAdj._dt_PrevAdj.Newdt_PrevAdjRow();

     

                        rowrptPrevAdj.DiasAtraso =

    Convert.ToString(row.Cells["n_diasatraso1"].Value);

                        rowrptPrevAdj.DiasAtraso_ =

    Convert.ToString(row.Cells["n_diasatraso2"].Value);

                         rowrptPrevAdj.NoRefrendos =

    Convert.ToString(row.Cells["n_numrefrendos"].Value);

                          rowrptPrevAdj.MontoPrestamo =

    Convert.ToString(row.Cells["m_montoprestamo"].Value);

                          rowrptPrevAdj.Abono =

    Convert.ToString(row.Cells["m_abono"].Value);

                         rowrptPrevAdj.Fecha =

    Convert.ToString(row.Cells["f_registro"].Value);

                          rowrptPrevAdj.Sucursal =

    Convert.ToString(row.Cells["d_caja"].Value);

                          rowrptPrevAdj.Usuario =

    Convert.ToString(row.Cells["c_usuario"].Value);

                           RptPrevAdj._dt_PrevAdj.Adddt_PrevAdjRow(rowrptPrevAdj);

                      }

                return RptPrevAdj;

    }

    

    y despues en el visualizador...

    

    

     

    Productividad. rpt_ConfigGralPrevAdj _reportePrevAdj = new rpt_ConfigGralPrevAdj();

    _reportePrevAdj.SetDataSource(_datosRptPrevAdj);

    lReportViewer1.ReportSource = _reportePrevAdj;

     

    public frm_VisualizaReporte(Productividad.dt_PrevAdj registros):this()

    {

            _datosRptPrevAdj = registros;

    }

     

     

    Saludos, espero me puedan ayudar...

    lunes, 04 de abril de 2011 19:08

Respuestas

  • Quiza este articulo te sirva:

    http://foros.hackerss.com/lofiversion/index.php/t2092.html

    Veras como el autor, creo una clase para generar Tickets, es una clase desarrollada por el.

    Ahora se que esto no es lo que pides, pero  podrias partir de esa clase para en lugar de igenerar ticket, genere un reporte, en las coordenadas que le indiques, y que acepte un origen de datos como parametro, que le apliques tal diseño, etc.

    Espero pueda haberte ayudado.

     


    Programador .NET - Desarrollador 5 Estrellas.
    • Marcado como respuesta slalo martes, 05 de abril de 2011 18:09
    lunes, 04 de abril de 2011 23:54
  • hola

    algo que me pregunto es porque quieres hacer algo tan generico, por lo general lo generico taer bastantes dificultades sino esta bien pesnado previamente

    por ahi ve a algo intemedio, analziado que es lo que verdaderamente necesitas

    sabes de movida que el reporte requiere ciertos campos que seguramente defines por medio de un dataset tipado, sino lo haces con uno tipado aconsejaria que lo hagas para evitar problemas futuros al definir los campos y despues este no te los tome como validos

    entocnes si ya partimos que el reporte requiere campos fijos porque sino no podras representar la informacion, hacer una clase tan generica tiene sentido ?

    podrias si hacer si una funcionalidad estilo Helper que dato el DataGrid procese los campos y devuelva el dataset tipado cargado, pero hasta ahi, despues se continua de forma normal asignando este como origen de datos del reporte

    ahora si tengo muchos datagrids y quiero generar un reporte con cada uno de ellos

    si tienes muchos datagrid, tambien vas a necesitar diseñas muchos reporte porque el diseño de cada uno seguramente difiera

    salvo que la idea es que el reporte sea unico y los datos proporcionados por todos los grid difiera en campos pero la indo mapea directo con los definidos en el reporte

    pero si este es el caso nuevamente una clase Helper podrias ser la opcion

    por clase Helper me refiero a una clase static on un metodo static que tome el DatagridView y devuelva un DataSet tipado, eso es todo, y dentro aplqiue la logica de transformacion tal como la has realizado

     

     

    veo que usas

    Productividad. dt_PrevAdj.dt_PrevAdjRow rowrptPrevAdj = RptPrevAdj._dt_PrevAdj.Newdt_PrevAdjRow();

    imagino este es el dataset tipado

    bien en ese caso si hay muchos datagridview todos podrian cargar este mismo dataset tipado con la inforamcion si los campos son coindicentes

    es mas podrias hacer uso de la funcion Merge de los datatable para unir todos los registros

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta slalo martes, 05 de abril de 2011 18:09
    martes, 05 de abril de 2011 0:54

Todas las respuestas

  • Quiza este articulo te sirva:

    http://foros.hackerss.com/lofiversion/index.php/t2092.html

    Veras como el autor, creo una clase para generar Tickets, es una clase desarrollada por el.

    Ahora se que esto no es lo que pides, pero  podrias partir de esa clase para en lugar de igenerar ticket, genere un reporte, en las coordenadas que le indiques, y que acepte un origen de datos como parametro, que le apliques tal diseño, etc.

    Espero pueda haberte ayudado.

     


    Programador .NET - Desarrollador 5 Estrellas.
    • Marcado como respuesta slalo martes, 05 de abril de 2011 18:09
    lunes, 04 de abril de 2011 23:54
  • hola

    algo que me pregunto es porque quieres hacer algo tan generico, por lo general lo generico taer bastantes dificultades sino esta bien pesnado previamente

    por ahi ve a algo intemedio, analziado que es lo que verdaderamente necesitas

    sabes de movida que el reporte requiere ciertos campos que seguramente defines por medio de un dataset tipado, sino lo haces con uno tipado aconsejaria que lo hagas para evitar problemas futuros al definir los campos y despues este no te los tome como validos

    entocnes si ya partimos que el reporte requiere campos fijos porque sino no podras representar la informacion, hacer una clase tan generica tiene sentido ?

    podrias si hacer si una funcionalidad estilo Helper que dato el DataGrid procese los campos y devuelva el dataset tipado cargado, pero hasta ahi, despues se continua de forma normal asignando este como origen de datos del reporte

    ahora si tengo muchos datagrids y quiero generar un reporte con cada uno de ellos

    si tienes muchos datagrid, tambien vas a necesitar diseñas muchos reporte porque el diseño de cada uno seguramente difiera

    salvo que la idea es que el reporte sea unico y los datos proporcionados por todos los grid difiera en campos pero la indo mapea directo con los definidos en el reporte

    pero si este es el caso nuevamente una clase Helper podrias ser la opcion

    por clase Helper me refiero a una clase static on un metodo static que tome el DatagridView y devuelva un DataSet tipado, eso es todo, y dentro aplqiue la logica de transformacion tal como la has realizado

     

     

    veo que usas

    Productividad. dt_PrevAdj.dt_PrevAdjRow rowrptPrevAdj = RptPrevAdj._dt_PrevAdj.Newdt_PrevAdjRow();

    imagino este es el dataset tipado

    bien en ese caso si hay muchos datagridview todos podrian cargar este mismo dataset tipado con la inforamcion si los campos son coindicentes

    es mas podrias hacer uso de la funcion Merge de los datatable para unir todos los registros

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta slalo martes, 05 de abril de 2011 18:09
    martes, 05 de abril de 2011 0:54

  •  
    Gracias Luis, ando viendo mejor lo que me dice Leandro, pero necesito convencerlos por aqui...
    SLALO Eduardo S.F.
    martes, 05 de abril de 2011 18:07
  •  
    Leandro haré lo que me dices pues si bien es cierto en los dataset tengo que pasarle valores fijos y pues para hacerlo algo generico si lo veo complicado, ahora solo espero que si lo acepten y pues hacerlo como ya tengo los otros, agradezco su respuesta y la atención que presta a las presguntas que formulamos... Reciban ambos un saludo....
    SLALO Eduardo S.F.
    martes, 05 de abril de 2011 18:09