This is a migrated thread and some comments may be shown as answers.

HTML5 Report Viewer load DataSet on codebehind

11 Answers 255 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Josue
Top achievements
Rank 1
Josue asked on 30 May 2016, 03:37 PM

Hello,

it's possible load a dataset to report in HTML5 Report Viewer from codebehind?

I'm search for this information but i can't find nothing.

In my application i have a aspx with HTML5 Report Viewer and a Report.vb, the report vb contains into a dataset with 3 datatables, but i can't load the data to these dataset.

PD: sorry if my english is a little bad, i speak a little english.

Thank you for your attention and help

11 Answers, 1 is accepted

Sort by
0
Stef
Telerik team
answered on 31 May 2016, 04:26 PM
Hi Josue,

In general, the purpose of the ObjectDataSource component is to provide data to the report in a declarative manner. The ObjectDataSource.DataSource should be the assembly qualified name or Type of the data access layer (class), where the reporting engine will use System.Reflection to create the instance of the class (by using its default constructor) and to execute its method specified by the ObjectDataSource.DataMember.


The ObjectDataSource and other data source components can load only one DataTable from the wrapped DataSet. If you create a model that exposes relations between the 3 data objects e.g. Entity Framework model, you can use the EntityDataSource component and the data-binding approach from How to Databind to Collection Properties.


Other approach, for updating a report before displaying it, is to use a custom resolver for the Reporting REST service. Please consider the example in this forum post.

Regards,
Stef
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
0
Josue
Top achievements
Rank 1
answered on 31 May 2016, 08:34 PM

So i can't not implement this Example with a HTML5 Report?

In my app i have a one dataset with three tables (DatosGenerales, ResumenReferencias, ReferenciasActivas), and the report have one dataobject by each table.

my report is type .vb

Apologies for my english

0
Josue
Top achievements
Rank 1
answered on 31 May 2016, 09:13 PM

I'm Get the Error: Value of type 'Telerik.Reporting.InstanceReportSource' cannot be converted to 'Telerik.ReportViewer.Html5.WebForms.ReportSource'.  in My app with the example.

this my code:

01.Dim ds As New ReporteHistorialCliente.DatosGeneralesDataTable
02. 
03.ds.Rows.Add("JHON", "DOE", "0-509-1938", "15/12/2010", "APC BURÓ S.A.", "")
04. 
05.Dim objDS As New Telerik.Reporting.ObjectDataSource()
06. 
07.objDS.DataSource = ds
08. 
09.rptviewerHC.ReportSource = reportSource
0
Josue
Top achievements
Rank 1
answered on 31 May 2016, 09:34 PM
Why i Can't edit or delete my answers, i publish the code with a error... and need edit de answer.
0
Katia
Telerik team
answered on 03 Jun 2016, 11:11 AM
Hi Josue,

The approach described in How to: Bind to a DataSet suggests how to bind the DataItem to a single DataTable from your DataSet as ObjectdataSourceComponents allows to load only one DataTable from the DataSet.
If this is not suitable in your scenario you can test the approach mentioned in my colleague's post (use EntityDataSource component) or add more DataItems and bind each one to a separate DataTable.

The error message appears because HTML5 WebForms report viewer can only work with TypeReportSource and UriReportSource.
HTML5 Viewer and Reporting REST service use a client-server model where the client sends short string descriptions (messages) to the server and gets content(report) from the server. The viewer(client) can only send a short description of the report (its assembly qualified name) or a path to the file on the server. The string description is interpreted by the service's report resolver which returns a ReportSource object.
When you try to pass report instance (InstanceReportSource) an error will occur as report instances cannot be transferred in a message.
Thus, you need to use TypeReportSource or UriReportSource to set viewer's source, or implement a custom report resolver to handle the resolve process yourself.


Regards,
Katia
Telerik
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
0
Josue
Top achievements
Rank 1
answered on 03 Jun 2016, 01:11 PM

Hi,

Thanks for your's answers, i can solved my problem

in the load of my aspx i put this code:

reportSource.Identifier = GetType(rptHistCliente).AssemblyQualifiedName
reportSource.Parameters.Add("identClie", identClie)
reportSource.Parameters.Add("tipoClie", tipoClie)
reportSource.Parameters.Add("usuario", usuario)
reportSource.Parameters.Add("identAsoc", identAsoc)
Me.rptviewerHC.ReportSource = reportSource

And did a class called ReportManager.vb with the methods to fill my rptHistCliente.vb, when the report is loading then databind the methods and fill the tables in the report.

The methods return IEnumerable(Of typeOfClass), example:

Public Function GetDatosGenerales(identClie As String, tipoClie As String) As IEnumerable(Of DatosGenerales)

 

Thanks for your  Help

regards

0
Oscar
Top achievements
Rank 1
answered on 17 Mar 2017, 07:05 PM

Por favor si me puedes ayudar un poco Josue,

me sale lo mismo: cant convert Telerik.Reporting.InstanceReportSource to Telerik.ReportViewer.Html5.WebForms.ReportViewer

Si la instacia se crea con Telerik.ReportViewer.Html5.WebForms.ReportViewer, no puedo hacer un bind a los detalles

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            DataSet ds = new DataSet();
            Telerik.Reporting.InstanceReportSource instanceReportSource1 = new Telerik.Reporting.InstanceReportSource();

            if (!string.IsNullOrEmpty(txtFecha1.Text) && !string.IsNullOrEmpty(txtFecha2.Text))
            {
                string periodo = string.Empty, nombre = string.Empty, direccion = string.Empty, telefono = string.Empty, ruc = string.Empty;
                string asesor1 = string.Empty, asesor2 = string.Empty, codigo = string.Empty;
                string fechaUltPago = string.Empty, montoUltPago = string.Empty, montoPorVencer = string.Empty;
                string fechaVencimiento = string.Empty, montoVencido = string.Empty, totalApagar = string.Empty;

                ds = clsVariablesNom.objReportesExternos.RepExtEstadoCliente(Convert.ToInt32(Session["idEmpresa"].ToString()), Session["RUC"].ToString(), Convert.ToDateTime(txtFecha1.Text), Convert.ToDateTime(txtFecha2.Text));
                if (ds.Tables[1].Rows.Count > 0) {
                    RepEstadoClienteBrico detalleRep = new RepEstadoClienteBrico();
                    detalleRep.DataSource = ds.Tables[1];


                    instanceReportSource1.ReportDocument = detalleRep;

                    instanceReportSource1.Parameters.Clear();
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("periodo", periodo));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("nombre", nombre));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("direccion", direccion));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("telefono", telefono));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("ruc", ruc));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("asesor1", asesor1));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("asesor2", asesor2));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("codigo", codigo));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("fechaUltimoPago", fechaUltPago));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("montoUltimoPago", montoUltPago));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("montoPorVencer", montoPorVencer));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("fechaVencimiento", fechaVencimiento));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("montoVencido", montoVencido));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("valorApagar", totalApagar));
                    
                    RvEstadoDet.ReportSource = instanceReportSource1;
                    RvEstadoDet.RefreshReport(); 
                }



            }
            else
            {
                lblStatus.Visible = true;
            }

0
Oscar
Top achievements
Rank 1
answered on 17 Mar 2017, 07:10 PM

with new Telerik.ReportViewer.Html5.WebForms.ReportViewer cant bind rpt.cs to dataTable

            Telerik.Reporting.InstanceReportSource instanceReportSource1 = new Telerik.Reporting.InstanceReportSource();

                    RepEstadoClienteBrico detalleRep = new RepEstadoClienteBrico();
                    detalleRep.DataSource = ds.Tables[1]; //from stored procedure

                    instanceReportSource1.ReportDocument = detalleRep; // data to detail report

                    instanceReportSource1.Parameters.Clear(); // master parameter (header)
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("periodo", periodo));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("nombre", nombre));
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("direccion", direccion));

                    RvEstadoDet.ReportSource = instanceReportSource1; // error cant convert Telerik.Reporting.InstanceReportSource to  

                                                                                                              //Telerik.ReportViewer.Html5.WebForms.ReportViewer
                    RvEstadoDet.RefreshReport(); //  


0
Josue
Top achievements
Rank 1
answered on 17 Mar 2017, 09:01 PM

Que tal Oscar,

Te comento un poco, ese error no pude solucionarlo puesto que no pude o no encontre como pasar un dataset como tal por medio de parametros. Sin embargo encontre otra vía (un poco larga, pero funcional) para poder reflejar la data en el reporte. Lo que puedes hacer es crear un parametro dentro del reporte de tipo String y pasas el dataSet como XML.

Para poder visualizarlo en el reporte debes crear una clase con los campos de la tabla y una lista de los mimsos. Ejemplo:

01.Public Class DatosGenerales
02. 
03.#Region "Declaraciones"
04.    Private sNombre As String
05.    Private sApellido As String
06.    Private sIdentClie As String
07.    Private fFecCreacion As String
08.    Private sUsuario As String
09.#End Region
10. 
11.#Region "Propiedades"
12.    Public Property Nombre As String
13.        Get
14.            Return sNombre
15.        End Get
16.        Set(value As String)
17.            sNombre = value
18.        End Set
19.    End Property
20. 
21.    Public Property Apellido As String
22.        Get
23.            Return sApellido
24.        End Get
25.        Set(value As String)
26.            sApellido = value
27.        End Set
28.    End Property
29. 
30.    Public Property IdentClie As String
31.        Get
32.            Return sIdentClie
33.        End Get
34.        Set(value As String)
35.            sIdentClie = value
36.        End Set
37.    End Property
38. 
39.    Public Property FecCreacion As String
40.        Get
41.            Return fFecCreacion
42.        End Get
43.        Set(value As String)
44.            fFecCreacion = value
45.        End Set
46.    End Property
47. 
48.    Public Property Usuario As String
49.        Get
50.            Return sUsuario
51.        End Get
52.        Set(value As String)
53.            sUsuario = value
54.        End Set
55.    End Property
56.#End Region
57. 
58.#Region "Metodos"
59.    Public Sub New(Optional nom As String = "", Optional ape As String = "", Optional ident As String = "", Optional fecCre As String = "", Optional user As String = "")
60.        Nombre = nom
61.        Apellido = ape
62.        IdentClie = ident
63.        FecCreacion = fecCre
64.        Usuario = user
65.    End Sub
66.#End Region
67. 
68.End Class
69. 
70.Public Class ListDatosGenerales
71.    Inherits List(Of DatosGenerales)
72. 
73.    Public Sub New(dts As DatosGenerales)
74.        Me.Add(dts)
75.    End Sub
76. 
77.End Class

 

Luego debes crear una clase que tendra un método compartido que sera el que llamaras dentro del reporte.

01.Imports System.Xml
02.Imports System.IO
03. 
04.Public Class ReportManager
05. 
06.    Public Function GetDatosGenerales(xmldt As String) As IEnumerable(Of DatosGenerales)
07.        Dim infos As New List(Of DatosGenerales)
08.        Dim datos As DatosGenerales
09.        Dim dt As New DataTable
10.        Dim ds As New DataSet
11.         
12.        ds.ReadXml(New XmlTextReader(New StringReader(xmldt)))
13.        If ds.Tables.Count > 0 Then
14.            dt = ds.Tables(0)
15.         
16.            For Each dtrow As DataRow In dt.Rows
17.                datos = New DatosGenerales()
18.                datos.Nombre = dtrow.Item("NOMBRE")
19.                datos.Apellido = dtrow.Item("APELLIDO")
20.                datos.IdentClie = dtrow.Item("IDENT_CLIE")
21.                datos.FecCreacion = dtrow.Item("FEC_CREACION")
22.                datos.Usuario = dtrow.Item("USUARIO")
23.                If infos Is Nothing Then
24.                    infos = New ListDatosGenerales(datos)
25.                Else
26.                    infos.Add(datos)
27.                End If
28.            Next
29.        Else
30.            datos = New DatosGenerales()
31.            infos = New ListDatosGenerales(datos)
32.        End If
33.         
34.        Return infos
35.    End Function
36.         
37.End Class

 

Luego realizas los siguientes pasos:

  1. Añadir un ObjectDataSource, este lo podras encontrar en la sección de Telerik Reporting R2...
  2. Al agregar el Object... te saldrá una lista para seleccionar el tipo del datasource, alli buscas la clase que creastes, en mi caso ReportManager, haces clic en Next
  3. Te saldrá otro cuadro ahora para elegir de donde se alimentará el datasource, primero seleccionas Choose a datasource member, y en la lista buscas la función que creastes, en mi caso GetDatosGenerales(...)  Click a Next
  4. En el valor del parametro, colocas el parametro que definistes en el reporte que trae el XML y luego le das a finalizar.

Luego en el reporte solo debes agregar una tabla (Puedes usar el Wizard) y asignarle el datasource que acabas de crear y seleccionar las columnas que deseas mostrar.

Por ultimó para setear todo esto al HTML5ReportViewer solo debes usar el siguiente código:

01.Dim reportSource As New Telerik.ReportViewer.Html5.WebForms.ReportSource
02. 
03.Dim ds as New DataSet
04. 
05.'ds = (Cargar DataSet)
06. 
07.reportSource.Identifier = GetType(reporteCreado).AssemblyQualifiedName
08.reportSource.Parameters.Add("dsDatosGenerales", ds.GetXml())
09. 
10.Me.rptviewerHTML5.ReportSource = reportSource

 

Cualquier consulta a la orden,

 

Saludos Cordiales

 

 

0
Oscar
Top achievements
Rank 1
answered on 17 Mar 2017, 10:02 PM

Muchas Gracias la ayuda, el tema es que con la versión anterior del reporting esas lineas de código que puse funcionaban perfectamente, pasaba los parámetros del reporte para el maesto, y el detalle lo cargaba desde un datatable...

Pero en esta verisión de report viewer eso ya no funciona Y LA DECOMUNTACION DE TELERIK SE HA VUELTO POBRE!!

Saludos,

Igualmente cualquier cosa a las ordenes.

0
Oscar
Top achievements
Rank 1
answered on 24 Mar 2017, 08:59 PM

I Found a solution,

1._ change into aspx

<%@ Register Assembly="Telerik.ReportViewer.Html5.WebForms, Version=11.0.17.118, Culture=neutral, PublicKeyToken=a9d7983dfcc261be" Namespace="Telerik.ReportViewer.Html5.WebForms" TagPrefix="telerik" %>

 TO

<%@ Register Assembly="Telerik.ReportViewer.WebForms, Version=11.0.17.118, Culture=neutral, PublicKeyToken=a9d7983dfcc261be" Namespace="Telerik.ReportViewer.WebForms" TagPrefix="telerik" %>

In version put your telerik version in my case is 11.0.17.118, it can be checked in references.

thats all

 

My code to do this is

 

ASPX FILE:

<form id="form1" runat="server">
    <div >
        <telerik:ReportViewer ID="RvRet" runat="server" Height="700px" Width="100%">
          
        </telerik:ReportViewer>
    </div>
    </form>

 

INTO CS FILE :

Telerik.Reporting.InstanceReportSource instanceReportSource1 = new Telerik.Reporting.InstanceReportSource();

                            rideRet rideRpt = new rideRet();   (rideRet is an report .cs)
                            rideRpt.DataSource = dsDetalle.Tables[0];
                            instanceReportSource1.ReportDocument = rideRpt;

 

               instanceReportSource1.Parameters.Clear();
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("ruc", ruc));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("razon", razon));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("obligadoContabilidad", obligadoContabilidad));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("numcontribuyente", numcontribuyente));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("actividadEmpresa", actividadEmpresa));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("direc", direc));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("DireccionLocal", DireccionLocal));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("ciudadLocal", ciudadLocal));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("numeroFactura", numeroFactura));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("ambiente", ambiente));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("tipoEmision", tipoEmision));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("claveAcceso", claveAcceso));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("fechaEmision", fechaEmision));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("razonSocialComprador", razonSocialComprador));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("identificacionComprador", identificacionComprador));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("campoAdicional", campoAdicional));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("totalSinImpuestos", totalSinImpuestos));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("totalDescuento", totalDescuento));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("importeTotal", importeTotal));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("subTotalIva0", subTotalIva0));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("subTotalIva12", subTotalIva12));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("valorIVA12", valorIVA12));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("numeroAutorizacion", numeroAutorizacion));
                instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("fechaAutorizacion", fechaAutorizacion));
                if (dtB.Rows[0][1].ToString() == "9")
                {
                    instanceReportSource1.Parameters.Add(new Telerik.Reporting.Parameter("periodoFiscal", periodoFiscal));
                }
                RvRet.ReportSource = instanceReportSource1;
                RvRet.RefreshReport();

 

thats all, u can use report cs, for  header and footer report use "=parameters.ruc", for detail report us "=fields.ruc" field came form datatable and my datatable were populated from stored procedure....

 

In html5 vierwer cant do that.... is an other achitecture.! so my solutions is using viewer webform.

 

 

Tags
General Discussions
Asked by
Josue
Top achievements
Rank 1
Answers by
Stef
Telerik team
Josue
Top achievements
Rank 1
Katia
Telerik team
Oscar
Top achievements
Rank 1
Share this question
or