Principales respuestas
Reportviewer no reconoce origen de datos

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
- Editado alfonso_tecnicopa miércoles, 17 de julio de 2019 3:00
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
- Marcado como respuesta alfonso_tecnicopa 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.
- Propuesto como respuesta Pablo RubioModerator miércoles, 17 de julio de 2019 16:17
- Marcado como respuesta alfonso_tecnicopa miércoles, 17 de julio de 2019 19:41
- Desmarcado como respuesta alfonso_tecnicopa miércoles, 17 de julio de 2019 22:39
-
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
pero no está muy claro, seguiré intentando// 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);
Saludos
La programacion en Microsoft cada ves se torna inalcanzable
- Editado alfonso_tecnicopa miércoles, 17 de julio de 2019 22:46
-
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
- Marcado como respuesta alfonso_tecnicopa jueves, 18 de julio de 2019 21:54