none
Report Viewer

    Pregunta

  • saludos a todos, estoy iniciando a crear reportes con el report viewer del visual studio 2005, resulta que los reportes con los objetos si los puedo ver, pero no los puedo cargar por codigo, alguien tiene idea como puedo hacerlo.

    Gracias

    • Cambiado Fran DiazModerator jueves, 21 de mayo de 2009 17:13 Reporting ([Loc]From:Lenguaje VB.NET)
    viernes, 20 de julio de 2007 2:08

Respuestas

  • Hola,

     

    Todos los informes entonces serán iguales entonces, ¿no?. Si es así ,create un nuevo parámetro y lo incluyes donde hagas la restricción(por hora, semana y mes). Estos datos lo calculas cuando hagas la seleccion de tu informe en la aplicación.

     

    El parámetro lo metes en el sql del informe algo así: select MisCampos from MisFacturas where Parameters!MiParametro.Value

     

    al parámetro le metes el trozo de sql que le falta, para una hora, semana o mes.

     

    ¿como lo metemos en el informe desde código y en tiempo de ejecución?

     

    Pues así:

     

    Code Snippet

    'Lista de parámtros(sin son unos pocos los puedes poner como ReportParameter a secas y listo).

    Dim parametros As New List(Of ReportParameter)

    'Añadimos tantos parámetros como queramos.

    parametros.Add(New ReportParameter("NombreDelParámetro", "Valor o array de valores", False))

    ' Añado los parámetros a mi informe(local). Para uno en servidor hubiese sido igual.

    Me.ReportViewer1.LocalReport.SetParameters(parametros)

    'Refresco el control.

    Me.ReportViewer1.RefreshReport()

     

    Espero que te sirva

     

    Un Saludo

    lunes, 23 de julio de 2007 22:04
    Moderador
  • Hola Luis,

     

    Te pongo un enlace a mi blog donde explico como pasar informes al reportviewer, parámetrosy otros en C# y VB.NET.

     

    Enlace: http://geeks.ms/blogs/fdiaz/archive/2007/08/20/llamando-a-nuestro-informe-desde-el-reportviewer.aspx

     

    Otros sobre Reporting Services: http://geeks.ms/blogs/fdiaz/archive/tags/Reporting+Services+2005/default.aspx

     

    Leelos tranquilamente y ya me comentarás.

     

    Un Saludo

     

     

     

    domingo, 16 de diciembre de 2007 12:51
    Moderador
  • Hola,

    Tú problema está en la propiedad LocalReport. Utiliza ReportServer ya que es esta la que se utiliza para informes de servidor ;)

    Prueba y nos cuentas.

    Un Saludo


    Fran Díaz | {geeks.ms/blogs/fdiaz/} | {onobanet.com} | {secondnug.com}
    lunes, 15 de junio de 2009 7:03
    Moderador

Todas las respuestas

  • Disculpa, pero no alcanzo a comprender el problema. Puedes extenderte un poco más?

     

    Lo siento! Debe ser que ya es viernes...

     

    Salud!

    viernes, 20 de julio de 2007 6:33
    Moderador
  • OK, sabes que cuando creas un informe nuevo y lo agregar al report viewer el crea objetos Dataset, TableAdapters y Databinding, lo cual hace que dependa de estos objetos para los informes, cuando creo nuevos y los agrego al objeto vuelve a crear mas objetos antes mencionados, lo cual es innecesario si lo puedes hacer via codigo y en  un solo form

    viernes, 20 de julio de 2007 11:53
  • Hola,

     

    Si lo que quieres es llamar a tu report desde código, tienes que hacerlo así:

    Code Snippet

    // De forma local

    reportViewer1.LocalReport.ReportPath = "Ruta\\Informe.rdlc";

    // De forma remota

    reportViewer1.ServerReport.ReportServerUrl = http://tuservidor/reportserver;

    reportViewer1.ServerReport.ReportPath = "UnaCarpeta/UnInforme(sinextension)"

     

     

    Un Saludo

    viernes, 20 de julio de 2007 12:39
    Moderador
  • Si, lo que pasa es cuando hago esto me dice que el dataset no esta instanciado

     

    lunes, 23 de julio de 2007 2:06
  • Hola,

     

    ¿Estás trabajando con informes en local o en servidor? y los objetos(si fuese en local), ¿están dentro del proyecto?.

     

    Un Saludo

    lunes, 23 de julio de 2007 6:20
    Moderador
  • Saludos, estoy iniciando con un proyecto local, los objetos estan dentro del proyecto,

    lo que quiero es evitar estos objetos automaticos, quiero codificarlos para personalizarlos y poder cargar 2 o mas reportes en el mismo form.

     

    Gracias por la ayuda

    lunes, 23 de julio de 2007 11:50
  • Te pongo un ejemplo:

     

    pongamos que ocVisor es un formulario que incluye un ReportViewer:

     

    Code Snippet

    Dim ocInforme As New ReportDocument

    ocInforme.Load(RUTA_INFORMES & "rptOrdenCompra.rpt", OpenReportMethod.OpenReportByDefault)

    ocInforme.SetDatabaseLogon("sa", "*****")

    ocInforme.RecordSelectionFormula = "{visOrdenesCompraDetalle.OrdenCompraID} = " & _insRegistro.OrdenCompraId.ToString

    '--- Pasar par metro: MostrarPrecio -----------------------------------

    Dim crParameterDiscreteValue As ParameterDiscreteValue

    crParameterDiscreteValue = New ParameterDiscreteValue

    crParameterDiscreteValue.Value = True

    ocInforme.ParameterFields.Item("MostrarPrecios").CurrentValues.Add(crParameterDiscreteValue)

    '----------------------------------------------------------------------

    ocVisor.Text = "Impresión OC"

    ocVisor.Informe = ocInforme

    ocVisor.ShowDialog()

     

     

    Salud!

    lunes, 23 de julio de 2007 12:00
    Moderador
  • Hola,

     

    Me perdí un poco, veamos, ¿estamos con Crystal o Reporting Services?.

     

    Un Saludo

    lunes, 23 de julio de 2007 12:22
    Moderador
  • Estamos con reporting services, el problema es el siguiente

    tengo una aplicacion que maneja el inventario y la facturacion, debo listar el catalogo de productos con sus precios, listar las ventas por hora, por semana y por mes, aparte de esto debo hacer el reporte de las ventas del dia.

    ya lo hice con el report viewer, el informe lo tengo listo; pero a la hora de llamar a los otros informes nolo puedo hacer.

    Hago uno y este me genera los objetos databinding, dataset y table adapter, pero no los ocupo lo que quiero es poder hacerlo via codigo para poder llamar a n cantindad de informes.

     

    Gracias por la ayuda, y disculpa tanta molestia.

    lunes, 23 de julio de 2007 12:40
  • Madre mía, si que ando perdido... yo estaba en Crystal...
    lunes, 23 de julio de 2007 12:44
    Moderador
  • Hola,

     

    Todos los informes entonces serán iguales entonces, ¿no?. Si es así ,create un nuevo parámetro y lo incluyes donde hagas la restricción(por hora, semana y mes). Estos datos lo calculas cuando hagas la seleccion de tu informe en la aplicación.

     

    El parámetro lo metes en el sql del informe algo así: select MisCampos from MisFacturas where Parameters!MiParametro.Value

     

    al parámetro le metes el trozo de sql que le falta, para una hora, semana o mes.

     

    ¿como lo metemos en el informe desde código y en tiempo de ejecución?

     

    Pues así:

     

    Code Snippet

    'Lista de parámtros(sin son unos pocos los puedes poner como ReportParameter a secas y listo).

    Dim parametros As New List(Of ReportParameter)

    'Añadimos tantos parámetros como queramos.

    parametros.Add(New ReportParameter("NombreDelParámetro", "Valor o array de valores", False))

    ' Añado los parámetros a mi informe(local). Para uno en servidor hubiese sido igual.

    Me.ReportViewer1.LocalReport.SetParameters(parametros)

    'Refresco el control.

    Me.ReportViewer1.RefreshReport()

     

    Espero que te sirva

     

    Un Saludo

    lunes, 23 de julio de 2007 22:04
    Moderador
  • si me sirve, pero si tengo dos o tres reportes diferentes como los llamo. lista de precio

    ventas

    cuentas por pagar

    cuenta contable

    martes, 24 de julio de 2007 0:10
  • Hola,

     

    Si te refieres a la forma de diferenciar los informes(siendo estos iguales), tan solo tienes que agregar un parámetro a tu título, cabecera u otro y a este en tiempo de ejecución pasarle el valor del título. Este parámetro lo meterías en el value de tu textbox(u otro control) y sería algo parecido a lo anterior. Ej.- Parameters!MiCabecera.Value.

     

    Espero que te ayude.

     

    Un Saludo

    martes, 24 de julio de 2007 6:15
    Moderador
  •  

    Hola,

     

    Por esta via exhorto dos criterios.  Uno:  el codigo en vb.net resulta ser muy interesante, es posible hacer el mismo ejemplo en c#.net ???.  Dos:  si podrias ayudarme te lo agradeceria, estoy confrontando el mismo inconveniente de que deseo via codigo en un formulario via web hacer el llenado de los parametros deseados para que estos mismos sean traspasados y a su vez ejecutados de forma transparente por el reporte como resultado final.

     

    Gracias anticipadas.

     

    viernes, 14 de diciembre de 2007 22:33
  • Hola Luis,

     

    Te pongo un enlace a mi blog donde explico como pasar informes al reportviewer, parámetrosy otros en C# y VB.NET.

     

    Enlace: http://geeks.ms/blogs/fdiaz/archive/2007/08/20/llamando-a-nuestro-informe-desde-el-reportviewer.aspx

     

    Otros sobre Reporting Services: http://geeks.ms/blogs/fdiaz/archive/tags/Reporting+Services+2005/default.aspx

     

    Leelos tranquilamente y ya me comentarás.

     

    Un Saludo

     

     

     

    domingo, 16 de diciembre de 2007 12:51
    Moderador
  • // Esta linea es muy importante, ya que invoca la coleccion de parametros en forma de lista.

    // El concepto de lista es basico porque en el se entiende la utilizacion de uno o varios parametros a utilizar.

    System.Collections.Generic.List<Microsoft.Reporting.WebForms.ReportParameter> paramList = new System.Collections.Generic.List<Microsoft.Reporting.WebForms.ReportParameter>();

    .

    .

    .

    // Luego de crear el objeto instanciado, en este caso paramList, se van invocando en el formulario web los parametros correspondientes.

    // Se especifica aqui el campo (Compania), el valor (strCompania.ToString()), y si sera visible o no (false).

    paramList.Add(new Microsoft.Reporting.WebForms.ReportParameter("Compañía", strCompania.ToString(), false));

    .

    .

    .

    // ReportViewer1, es el nombre del objeto Reporting Service que se utilizo en este ejemplo al ser insertado o instanciado en el formulario web.  Ver propiedad "name" del mismo

    // Aqui se pasa al reporte los parametros deseados. Se asume previamente que ya se tiene el nombre del reporte asignado en la linea de comando:  this.ReportViewer1.ServerReport.ReportPath = "/NOMBRE DEL REPORTE SIN EXTENSION";

    this.ReportViewer1.ServerReport.SetParameters(paramList);

     

     

    Gracias Frank Diaz

    P.D.:  Tuve problemas, con la declaracion de los nombres, ya que utilizas el ultimo recurso, osea, utilizas List, y utilice para mayor exactitud System.Collections.Generic.List ...

    Hasta una proxima.

    lunes, 17 de diciembre de 2007 19:42
  • Hola Luis,

     

    ¿Lo solucionastes entonces?

     

    Un Saludo

     

    martes, 18 de diciembre de 2007 8:10
    Moderador
  • Hola,

    Soy nueva trabajando con ReportViewer y con Reporting Service pero ya he revisado el blog de Fran Diaz y muchos otros foros y no consigo como mostrar un reporte usando el reportViewer. Cree un reporte utilizando Report Builder (reporte1.rdl), por otro lado tengo mi proyecto en VS usando C# en donde creo un windowsForm y le agrego el control ReportViewer. Este es el codigo de esa ventana:

    String reportePath= "C:\\Document and Settings......\\reporte1";

    this.reporViewer1.ProcessingMode = ProcessingMode.Local;

    this.reportViewer1.LocalReport.ReportPath = reportePath;

    this.reportViewer.RefreshReport();

    Cuando ejecuto la ventana me sale el siguiente mensaje:

    Se ha producido un error durante el procesamiento local de informes.
    No se ha especificado la definicion de informe 'C:\Document and Settings.....\reporte1'
    No se pudo encontrar el archivo 'C:\documents and Settings----\reporte1'




    Si agrego la extension de archivo (.rdl) Me lanza el siguiente mensaje:

    Se ha producido un error durante el procesamiento local de infirmes.
    La definicion del informe 'Informe Principal' no es valida.
    La definicion del informe no es valida. Detalles: La definicion de informe tiene un espacio de nombres destino no valido 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportfefinition' que no se puede actualizar.



    Si pudieran ayudarme se los agradeceria mucho, no se que me esta faltando...
    jueves, 11 de junio de 2009 15:11
  • Hola,

    Tú problema está en la propiedad LocalReport. Utiliza ReportServer ya que es esta la que se utiliza para informes de servidor ;)

    Prueba y nos cuentas.

    Un Saludo


    Fran Díaz | {geeks.ms/blogs/fdiaz/} | {onobanet.com} | {secondnug.com}
    lunes, 15 de junio de 2009 7:03
    Moderador
  • Hola a todos,

    Yo tengo el mismo problema. Tengo un ReportViewer y estoy tratando de asignarle el report (archivo *.rdlc) y el DataSet, todo ello por código, dinámicamente, pero al ejecutarlo, el ReportViewer muestra el siguiente mensaje: "No se ha proporcionado ninguna instancia de datos para el origen de datos 'PruebasDataSet_tbDocumentos'."

    Para ello uso el siguiente codigo (en el Form Load del Formulario):
    ------------------------------------------------------------------------
    reportViewer1.Reset();
    reportViewer1.ProcessingMode =
    ProcessingMode
    .Local;

     

    LocalReport localReport = reportViewer1.LocalReport;localReport.ReportPath = @"C:\Pruebas\Reports_MiniVista\RDLC\Prueba_RDLC\Prueba_RDLC\Report1.rdlc";

     

     

    DataSet dataset = new DataSet("dsDocumentos");
    GetDocumentos(ref
    dataset);

     

    ReportDataSource repdtsDocumentos = new ReportDataSource();

    repdtsDocumentos.Name =

     

    "DataSource_Documentos";

    repdtsDocumentos.Value = dataset.Tables[

     

    "tbDocumentos"];
    localReport.DataSources.Add(repdtsDocumentos);
    localReport.Refresh();
    reportViewer1.RefreshReport();
    ------------------------------------------------------------------------

    La función "GetDocumentos" contiene el siguiente código:

    ------------------------------------------------------------------------
    private void GetDocumentos(ref DataSet
    dsDocum)
    {
    string sqlDocumentos = "SELECT * FROM tbDocumentos;"
    ;

     

    SqlConnection connection = new SqlConnection("Server=MyServer\\SQLEXPRESS; database=Pruebas; integrated security=yes");
    SqlCommand command = new SqlCommand(sqlDocumentos, connection);
    SqlDataAdapter DocumentosAdapter = new SqlDataAdapter(command);
    DocumentosAdapter.Fill(dsDocum,
    "tbDocumentos");
    }
    ------------------------------------------------------------------------

    PruebasDataSet es un DataSet que tengo incluido en el proyecto.

    ¿Alguien sabe porque el Report Viewer no muestra resultados? (He comprobado que "dataset" contiene registros: dataset.Tables["tbDocumentos"].Rows.Count = 95).

    Muchas gracias.

    Un saludo.

     

    martes, 01 de diciembre de 2009 14:59
  • Hola a todos,

    Yo tengo el mismo problema. Tengo un ReportViewer y estoy tratando de asignarle el report (archivo *.rdlc) y el DataSet, todo ello por código, dinámicamente, pero al ejecutarlo, el ReportViewer muestra el siguiente mensaje: "No se ha proporcionado ninguna instancia de datos para el origen de datos 'PruebasDataSet_tbDocumentos'."

    Para ello uso el siguiente codigo (en el Form Load del Formulario):
    ------------------------------------------------------------------------
    reportViewer1.Reset();
    reportViewer1.ProcessingMode =
    ProcessingMode
    .Local;

     

    LocalReport localReport = reportViewer1.LocalReport; localReport.ReportPath = @"C:\Pruebas\Reports_MiniVista\RDLC\Prueba_RDLC\Prueba_RDLC\Report1.rdlc" ;

     

     

    DataSet dataset = new DataSet ( "dsDocumentos" );
    GetDocumentos( ref
    dataset);

     

    ReportDataSource repdtsDocumentos = new ReportDataSource ();

    repdtsDocumentos.Name =

     

    "DataSource_Documentos" ;

    repdtsDocumentos.Value = dataset.Tables[

     

    "tbDocumentos" ];
    localReport.DataSources.Add(repdtsDocumentos);
    localReport.Refresh();
    reportViewer1.RefreshReport();
    ------------------------------------------------------------------------

    La función "GetDocumentos" contiene el siguiente código:

    ------------------------------------------------------------------------
    private void GetDocumentos( ref DataSet
    dsDocum)
    {
    string sqlDocumentos = "SELECT * FROM tbDocumentos;"
    ;

     

    SqlConnection connection = new SqlConnection ( "Server=MyServer\\SQLEXPRESS; database=Pruebas; integrated security=yes" );
    SqlCommand command = new SqlCommand (sqlDocumentos, connection);
    SqlDataAdapter DocumentosAdapter = new SqlDataAdapter (command);
    DocumentosAdapter.Fill(dsDocum,
    "tbDocumentos" );
    }
    ------------------------------------------------------------------------

    PruebasDataSet es un DataSet que tengo incluido en el proyecto.

    ¿Alguien sabe porque el Report Viewer no muestra resultados? (He comprobado que "dataset" contiene registros: dataset.Tables[ "tbDocumentos" ].Rows.Count = 95).

    Muchas gracias.

    Un saludo.

     


    Yo ando por las mismas que noegano a mi tambien me sale el siguiente mensaje "No se ha proporcionado ninguna instancia de origen de datos para el origen de datos "DtsBase_Materiales"
    Lo he intentado todo pero no me resulta agreguenle a mi problema que ademas debo construir el informe tomando datos de una base de datos access, por lo tanto, no puedo hacer uso de procedimientos almacenados. Bueno aqui les adjunto mi codigo si me pueden echar una mano.
    Fran Diaz he leido tu blog y aprovecho para felicitarte por tu desinteresada ayuda.


    Imports System.Data
    Imports System.Data.OleDb
    Imports Microsoft.Reporting.WinForms
    Public Class frmInforme

        Private Sub frmInforme_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.ReportViewer1.LocalReport.DataSources.Clear()
            Dim ds As New DataSet()
            Dim cnx As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\jprohens\bd\bd1.mdb")
            Dim da As New OleDbDataAdapter("Select CodTarja,Ntarja,TotCaja from Tarjas", cnx)
            da.Fill(ds)
            Dim datasource As New ReportDataSource("Me.dtsBase.Tarjas", ds.Tables(0))
            Me.ReportViewer1.LocalReport.DataSources.Add(datasource)
            Me.ReportViewer1.RefreshReport()
        End Sub
    End Class

    Nota:
    Una variante del ejemplo que propone Fran en http://geeks.ms/blogs/fdiaz/archive/2008/06/10/how-to-reporting-services-sin-iis-y-sin-servidor-de-informes.aspx, es que Limpie totalmente de datasource usando clear().
    El codigo corresponde a una prueba que estoy tratando de resolver.
    De antemano muchas gracias






    sábado, 05 de diciembre de 2009 22:40
  • tengo un problema bastante grande.

     

    tengo un report viewer donde quiero motrar 2 reporte .rdlc. el problema es que dinamicamente no puedo cambiar de reporte pero si puedo en diseño 

    haber si poei echar una mano

    el codigo que utilizo es el siguiente:

     

        Me.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local
    
        ReportViewer1.LocalReport.ReportPath = Form1.reporte
    
        If Form1.aux = 2 Then
          'TODO: esta línea de código carga datos en la tabla 'PIEZASDataSet.pedido' Puede moverla o quitarla según sea necesario.
          Me.pedidoTableAdapter.Fill(Me.PIEZASDataSet.pedido)
          Me.ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report2.rdlc"
        End If
    
        If Form1.aux = 1 Then
          'TODO: esta línea de código carga datos en la tabla 'PIEZASDataSet.Despiece' Puede moverla o quitarla según sea necesario.
          Me.DespieceTableAdapter.Fill(Me.PIEZASDataSet.Despiece)
          Me.ReportViewer1.LocalReport.ReportEmbeddedResource = "WindowsApplication1.Report1.rdlc"
        End If
    
        Me.Controls.Add(ReportViewer1)
        Me.ReportViewer1.RefreshReport()

    la variable reporte del form1 es la ruta el reporte

    lunes, 03 de mayo de 2010 11:32
  • hola ,

    es que solo te vas a mostrar un solo reporte por que tu lo tienes con una condicion Form1.aux = 2 solo te mas a mostrar ese reporte y si Form1.aux = 1 te mas a mostrar el otro no te puede mostrar los dos ,Nota si no tubira las condiciones solo te mostrara

    el utlimo reporte.

     

    enmanuel grullard

    republica dominicana

    viernes, 14 de mayo de 2010 17:31
  • Y la pregunta sin respuesta, como mostramos 2 o mas reportes en un reportViewer al mismo tiempo?
    sábado, 26 de febrero de 2011 0:09
  • saludos a todos

    Tengo un datagridviewer y un reportviewer, pero no puedo visualizar los datos de mi datagrid al report, que estoy asiendo mal, anexo codigo

    ds.Clear()

    ds.Clear()

    daConexion.Open()

    da.Fill(ds,

     

    "Repveent"

    )

    DataGridView1.DataSource = ds.Tables(

     

    "Repveent"

    )

    dv.Table = ds.Tables(

     

    "Repveent"

    )

    da.Fill(ds,

     

    "Repveent"

    )

     

     

    'ReportViewer1.ProcessingMode = ProcessingMode.Local

     

     

    Dim report As LocalReport

    = ReportViewer1.LocalReport

    report.ReportPath =

     

    "miotroreporte.Report1.rdlc"

    report.DataSources.Clear()

     

     

    Dim rs = New ReportDataSource

    ()

    rs.Name =

     

    "Repveent"

    rs.Value = DataGridView1.DataSource

     

    'ds.Tables("Repveent")

    report.DataSources.Add(rs)

    report.ReportEmbeddedResource =

     

    "miotroreporte.Report1.rdlc"

    report.Refresh()

    miércoles, 13 de abril de 2011 17:47
  • Voy a cerrar este hilo, porque ya lleva 25 mensajes y la conversación va derivando hacia temas completamente distintos del original. Si es preciso, quien tenga alguna otra consulta sobre el ReportViewer que abra otro hilo poniendo un título que indique el asunto concreto de la pregunta.

     

    sábado, 21 de mayo de 2011 18:26
    Moderador
  • Hola Fran Díaz,

    Se que el post ya tiene varios años... pero cuando la duda persiste el entusiamo tambien... tengo un problema que he posteado ya hace unos días he posteado un tema, que no he podido resolver.. echame una manito por favor

    http://social.msdn.microsoft.com/Forums/es-ES/repdeves/thread/444075ee-d893-40d9-bee5-42c79f77fc3c


    Jesús Laborda Bogotá, Colombia

    viernes, 13 de julio de 2012 21:38