none
Hacer que un reporte se llene con los datos de un datagrid RRS feed

  • Pregunta

  • Hola, lo que quiero hacer es que al seleccionar un registro de de un datagrid me cargue el reporte con los datos que se encuentren en ese datagrid.

    Gracias.


    Renzo Rivera

    • Cambiado Enrique M. Montejo miércoles, 3 de agosto de 2016 5:48 Pregunta relacionada con el control de informes de Windows Forms.
    miércoles, 27 de julio de 2016 0:49

Todas las respuestas

  • El truco está en que no se usan en el reporte los datos del DataGrid, sino los datos del objeto en memoria que por detrás hayas conectado con el DataGrid usando databinding. Por ejemplo, si cargaste los datos en un DataTable y luego le conectaste ese datatable al datasource del grid, entonces ese datatable es el que vas a utilizar para pasárselo al reporte. Y si no le pusiste ningún objeto en el datasource, no importa; se lo puedes añadir antes de empezar a cargar datos, y el datagrid los copiará al datatable.

    Una vez que ya tienes el objeto con datos, se lo pasas al reporte usando los mecanismos previstos en el sistema de reportes que estés usando. Por ejemplo, si los reportes los haces con un .rdlc conectado a un ReportViewer, entonces los datos se los pasarías a través del ReportDataSource:

    Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource("nombre", elDataTable);
    this.reportViewer.LocalReport.DataSources.Add(rprtDTSource);

    Si estás usando Crystal Reports, los objetos que maneja tienen otros nombres, pero el principio es el mismo: le entregas el DataTable y el motor de reportes lo usa internamente para cargar el informe.

    No queda claro en tu pregunta si quieres pasarle al reporte todo el contenido del grid, o si únicamente quieres usar los datos del registro que se seleccionó, para cargar un reporte distinto cuya información depende de dichos datos. Si fuera así, puedes aplicar también el mismo principio: tomas los datos, con ellos fabricas el datatable de información para el reporte, y le pasas ese nuevo datatable al motor de reportes.

    • Marcado como respuesta Enrique M. Montejo jueves, 28 de julio de 2016 8:56
    • Desmarcado como respuesta Renzo19 lunes, 1 de agosto de 2016 7:16
    • Propuesto como respuesta J. Carlos Herrero lunes, 1 de agosto de 2016 10:43
    miércoles, 27 de julio de 2016 6:32
  • Hola Básicamente lo que quiero hacer es que cuando el ID de la tabla facturaciones y el ID de la tabla factura(Detalle) sean iguales me muestre todos los campos de ambas tablas, cuyo iD sea igual. Que me muestre eso en un reporte claro, pero.. como hago eso? me imagino que con un procedimiento almacenado ,pero como? Adema que tendria yo que poner en el visual.

    Renzo Rivera

    lunes, 1 de agosto de 2016 7:19
  • //procedimiento almacenado

    create proc Mostrar

    as

    Select f.campo1,f.campo2,d.campo1,d.campo2 from facturaciones as f inner join

    factura as d on f.id = d.id

    go

    public DataTable Mostrar()

    {

       DataTable mostrar = new DataTable();

     try

    {

       SqlConnection sqlCon = new SqlConnection(tuConexion);

      SqlCommand sqlCm = new SqlCommand("Mostrar",SqlCon);

    sqlCm.CommandType = CommandType.StoredProcedure;

    SqlDataAdapter sqlAd = new SqlDataAdapter(sqlCm);

    sqlAd.Fill(mostar);

    }

    catch

    {

       mostar = null;

    }

    return mostrar;

    }

    Con eso ya obtienes tu DataTable para hacer el reporte


    lunes, 1 de agosto de 2016 9:47