none
Reportviewer no reconoce origen de datos RRS feed

  • Pregunta

  • Compañeros veo que no hay mucha documentación sobre el control Report Viewer que viene preinstalado en VS, para la visión de reportes incrustados, estoy realizando un Reporte.rdlc desde las dos opciones que da el compilador(Report y ReportWizard) y en ambos compruebo que el objeto DataAdapter del Datos.xsd que genera al hacer click derecho vista previa me devuelve datos

    sin embargo en mi control de mi pagina.aspx, si yo asigno el reporte desde diseño y todavía le asigno propiedad ReportPath=~/MiReporte.rdlc al ejecutarlo me sigue diciendo que no se puede conectar al origen de datos


    La programacion en Microsoft cada ves se torna inalcanzable


    miércoles, 17 de julio de 2019 2:57

Respuestas

  • Bueno, como siempre me gusta poner la solución, ya me estaba tardando pero el haber puesto un control 'CrystalReportViewer' que no llenaba(para hacer pruebas) encima de mi ReportViewer en asp me estaba estorbando en la ejecución.

    Al final era realmente simple usar:

      ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/ReportDemanda.rdlc");
                    ReportViewer1.LocalReport.DataSources.Clear();
                    ReportDataSource rdc = new ReportDataSource("VendidosDS", ds.Tables["StoredProcedure2"]);
                    ReportViewer1.LocalReport.DataSources.Add(rdc);                
                    ReportViewer1.DataBind();
    donde 
    "VendidosDS" <-- es el nombre que le asigné al Dataset.xsd

    La programacion en Microsoft cada ves se torna inalcanzable

    jueves, 18 de julio de 2019 21:54

Todas las respuestas

  • Ojo, creo que estás mezclando los reportes de lado servidor con los reportes de lado cliente.

    Cuando es un reporte de lado servidor (.rdl) entonces es suficiente que al ReportViewer le pongas el ReportPath y con eso ya se genera el reporte en el Report Server y toma sus datos automáticamente.

    Pero cuando usas un reporte de lado cliente (.rdlc), los datos del dataadapter solo los usa en tiempo de diseño para que el diseñador te pueda mostrar las columnas para seleccionarlas. En tiempo de ejecución, NO toma automáticamente el dataadapter que usaste en tiempo de diseño. Si quieres que use esos datos, tienes que "conectarle" por programación el DataTable que te devuelve el DataAdapter a la propiedad ReportDataSources del ReportViewer. La sintaxis para hacer esto es un poco engorrosa, pero encontrarás miles de ejemplos en la Red, que puedes copiar y pegar.

    miércoles, 17 de julio de 2019 6:53
  • Ojo, creo que estás mezclando los reportes de lado servidor con los reportes de lado cliente.

    Cuando es un reporte de lado servidor (.rdl) entonces es suficiente que al ReportViewer le pongas el ReportPath y con eso ya se genera el reporte en el Report Server y toma sus datos automáticamente.

    Pero cuando usas un reporte de lado cliente (.rdlc), los datos del dataadapter solo los usa en tiempo de diseño para que el diseñador te pueda mostrar las columnas para seleccionarlas. En tiempo de ejecución, NO toma automáticamente el dataadapter que usaste en tiempo de diseño. Si quieres que use esos datos, tienes que "conectarle" por programación el DataTable que te devuelve el DataAdapter a la propiedad ReportDataSources del ReportViewer. La sintaxis para hacer esto es un poco engorrosa, pero encontrarás miles de ejemplos en la Red, que puedes copiar y pegar.

    Le agradezco ingeniero, aunque según la documentación dice solo seleccionar el reporte en modo diseño cuando ya es parte del proyecto y en la parte del codigo solo viene lo sig

    // Set the processing mode for the ReportViewer to Local reportViewer.ProcessingMode = ProcessingMode.Local; LocalReport localReport = reportViewer.LocalReport; localReport.ReportPath = "Sales Order Detail.rdlc"; DataSet dataset = new DataSet("Sales Order Detail"); string salesOrderNumber = "SO43661"; GetSalesOrderData(salesOrderNumber, ref dataset);

    //porque hace referencia a dataset q no utiliza el método ReportDataSource dsSalesOrder = new ReportDataSource(); dsSalesOrder.Name = "SalesOrder"; // no explica si éste Name es libre dsSalesOrder.Value = dataset.Tables["SalesOrder"]; localReport.DataSources.Add(dsSalesOrder);

    pero no está muy claro, seguiré intentando

    Saludos


    La programacion en Microsoft cada ves se torna inalcanzable


    miércoles, 17 de julio de 2019 19:43
  • Bueno, como siempre me gusta poner la solución, ya me estaba tardando pero el haber puesto un control 'CrystalReportViewer' que no llenaba(para hacer pruebas) encima de mi ReportViewer en asp me estaba estorbando en la ejecución.

    Al final era realmente simple usar:

      ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/ReportDemanda.rdlc");
                    ReportViewer1.LocalReport.DataSources.Clear();
                    ReportDataSource rdc = new ReportDataSource("VendidosDS", ds.Tables["StoredProcedure2"]);
                    ReportViewer1.LocalReport.DataSources.Add(rdc);                
                    ReportViewer1.DataBind();
    donde 
    "VendidosDS" <-- es el nombre que le asigné al Dataset.xsd

    La programacion en Microsoft cada ves se torna inalcanzable

    jueves, 18 de julio de 2019 21:54