Web Toolbar by Wibiya Llamando a nuestro informe desde el ReportViewer. - Fran Diaz

Fran Diaz

Reporting Services, .NET, tecnologías Microsoft y otros

Email Notifications

Recent Posts

Tags

News

Community

Comunidades

  • OnobaNET
  • Grupo de usua
  • INETA
  • Culminis
  • Zona de Grupos de Usuarios Online
  • Foro MSDN Español: Colaborador

Webs Amigas

Archives

Llamando a nuestro informe desde el ReportViewer.

Normalmente creamos nuestro informe con alguna herramienta y lo previsualizamos para ver que todo anda correctamente, retocamos, vemos que va como queremos y lo preparamos para que se pueda ver desde alguna aplicación.

Tenemos dos formas de tener nuestro informe. Una es de forma local y otra de forma remota.
La local es cuando los informes los tenemos localizado en algún lugar, es decir, en alguna carpeta de nuestro equipo por ejemplo.

Cuando decimos que nuestro informe está en el servidor, significa que este está alojado en algún servidor de informes del servidor de base de datos sql server(en mi caso 2005). Esto lo hacemos desde un proyecto de tipo servidor de informes desde el ide de visual studio, pero bueno, eso es otro tema. El caso es que, cuando tenemos este informe listo, no solo basta con tenerlo, sino que hay que subirlo al servidor. Para hacer esto, tan solo tendremos que asignarle la ubicación del servidor de informes(normalmente: http://[localhost]ó[unaIP]ó[nombreDelServidor]/[reportserver]ó[reportserver$NombreInstancia])  y la carpeta donde almacenaremos nuestro informe, si este no va en el raíz del sitio. Una vez hecho esto, implementamos y el informe estará subido.

Ahora queda llamarlo. Podemos llamarlo desde el browser o desde un control nuevo llamado ReportViewer.

Yo prefiero llamarlo desde el ReportViewer, y tenerlo todo controlado, desde el browser podemos llamarlo con parámetros incluso desde la url, pero la verdad no lo utilizé mucho. Esto no significa que desde un browser no se pueda controlar ni mucho menos.

Ahora voy a explicar como configurar algunas propiedades del ReportViewer cuando estamos tratando con un informe desde un servidor de informes.

Para llamar un informe de forma remota, como ya dije antes, tan solo tenemos que especificar el servidor de informes, la carpeta(esta es opcional) y el informe.

Visual Basic:

' Le indicamos la carpeta y el informe si la extensión de este.
 Me.ReportViewer1.ServerReport.ReportPath =  "CarpetaDondeEsteMiInforme/MiInforme(sin la extensión)"
 ' Y el servidor donde está alojado el informe.
 Me.ReportViewer1.ServerReport.ReportServerUrl = _
            New System.Uri("http://[localhost] ó [mi servidor] ó [UnaIP]/" & _
                                      "[reportserver] ó [reportserver$MiInstancia]/")

C#:

// Le indicamos la carpeta y el informe sin la extensión de este.
this.reportViewer1.ServerReport.ReportPath = "CarpetaDondeEsteMiInforme/MiInforme(sin la extensión)";
// Y el servidor donde está alojado el informe.
this.reportViewer1.ServerReport.ReportServerUrl =
                new System.Uri("http://[localhost] ó [mi servidor] ó [UnaIP]/" +
                                          "[reportserver] ó [reportserver$MiInstancia]/");

Si además nuestro informe tiene parámetros, no hace falta mostrar los controles que pone el reportviewer para cada parámetro, que están muy bien para introducirlos nosotros mismos al probar nuestro informe. ¿Pero y si queremos controlar que es lo que mete el usuario?, para ello podemos crear nosotros nuestros controles personalizados, métodos de comprobación y otros métodos. Luego una vez hecho estas comprobaciones podremos introducir nuestros parámetros también desde código. 

En este caso para meter uno o varios parámetros deberemos de crear un array de la clase ReportParameter o una colección de estos. Cada parámetro deberá de llevar el nombre del parámetro al que se le va a pasar un valor o conjunto de valores y opcionalmente un valor booleano que nos indicará si el parámetro se muestra en la interfaz de usuario o no.

Ejemplo con dos formas diferentes de meter los parámetros.-

Visual Basic:

'  Creo una colección de parámetros de tipo ReportParameter
' para añadirlos al control ReportViewer.
Dim parametros As New List(Of ReportParameter)
' Añado los parámetros necesarios.
parametros.Add(New ReportParameter("NombreDelParámetro", "Valor o Array de valores"))
' Añado el/los parámetro/s al ReportViewer.
Me.ReportViewer1.ServerReport.SetParameters(parametros)

' Creo uno o varios parámetros de tipo ReportParameter con sus valores.
Dim parametro As New ReportParameter("NombreDelParámetro", "Valor o Array de valores")
' Añado uno o varios parámetros(En este caso solo uno al ReportViewer
Me.ReportViewer1.ServerReport.SetParameters(parametro)

C#:

// Creo una colección de parámetros de tipo ReportParameter 
// para añadirlos al control ReportViewer.
List<ReportParameter> parametros = new List<ReportParameter>();
// Añado los parámetros necesarios.
parametros.Add(new ReportParameter("NombreDelParámetro","Valor o Array de valores"));
// Añado el/los parámetro/s al ReportViewer.
this.reportViewer1.ServerReport.SetParameters(parametros);

// Creo uno o varios parámetros de tipo ReportParameter con sus valores.
ReportParameter parametro = new ReportParameter("NombreDelParámetro", "Valor o Array de valores");
// Añado uno o varios parámetros(En este caso solo uno al ReportViewer
this.reportViewer1.ServerReport.SetParameters(new ReportParameter [] {parametro});

Por otro lado, si además queremos obtener los parámetros que tiene nuestro informe, podemos obtenerlo desde el ReportViewer. Esta sentencia sirve tanto para informes locales como remotos.

Visual Basic:

' Creo una colección de parámetros y meto los parámetros.
Dim parametros As ReportParameterInfoCollection = Me.ReportViewer1.ServerReport.GetParameters()
'Dim parametros As ReportParameterInfoCollection = Me.ReportViewer1.LocalReport.GetParameters()

C#:

// Creo una colección de parámetros y meto los parámetros.
ReportParameterInfoCollection parametros = this.reportViewer1.ServerReport.GetParameters();
//ReportParameterInfoCollection parametros = this.reportViewer1.LocalReport.GetParameters();

 Credenciales. Nuestras fuentes de datos pueden o no pedir credenciales a la hora de ejecutar el informe. Para ver que fuentes de datos tenemos en nuestro informe y asignarle los permisos necesarios a cada una, podemos hacerlo de la siguiente forma:

Visual Basic:

Dim total As Integer = Me.ReportViewer1.ServerReport.GetDataSources().Count
' Creo un array de DataSourceCredentials con el total 
' de DataSources que tiene el informe.
Dim permisos(total) As DataSourceCredentials
' Obtengo los datasources del informe.
Dim datasources As ReportDataSourceInfoCollection = Me.ReportViewer1.ServerReport.GetDataSources()
' Ahora por cada fuente de datos, le asignaremos al array de credenciales
' el nombre, userid y password.
For i As Integer = 0 To total - 1
       permisos(i).Name = datasources(i).Name
       permisos(i).UserId = "UsuarioDeNuestraBBDD"
       permisos(i).Password = "PasswordDelUserId"
Next

C#:

int total = this.reportViewer1.ServerReport.GetDataSources().Count;
// Creo un array de DataSourceCredentials con el total 
// de DataSources que tiene el informe.
DataSourceCredentials [] permisos = new DataSourceCredentials[total];
// Obtengo los datasources del informe.
ReportDataSourceInfoCollection datasources = this.reportViewer1.ServerReport.GetDataSources();
// Ahora por cada fuente de datos, le asignaremos al array de credenciales
// el nombre, userid y password.
for (int j = 0; j < total; i++)
{
        permisos[j].Name = datasources[j].Name;
        permisos[j].UserId = "UsuarioDeNuestraBBDD";
        permisos[j].Password = "PasswordDelUserId";
 }
 // Asigno los permisos.
 this.reportViewer1.ServerReport.SetDataSourceCredentials(permisos);

Bueno se me queda en el tintero para otro posible post, como conectarse de forma local a un informe. Ya que la mayoría de estas opciones sirven tanto para informes locales(LocalReport) como para los que están en el servidor(ServerReport).

Espero que les sirva.

Un Saludo

Posted: 20/8/2007 16:01 por Fran Díaz | con 63 comment(s) |
Comparte este post:

Comentarios

jquevedo ha opinado:

Hola fran probe todos tus ejemplos pero tengo un problema que a mi no me sale, tengo configurado el report service con el administrador de dominio en un pc cuando me logeo con el administrador si corre los reportes pero si me logeo con otro usuario me dice que no tengo los permisos suficientes pare mostrar el reporte, ademas tengo usuario que se conectan de otros sitios pero tampoco no pueden ver los informes ahi te envio el codigo a ver si me puedes ayudar.

frmvisualizanotapedido.ReportViewer1.ServerReport.ReportPath = "/informes/notapedido"

       If nombredominio = "xyz.com" Then

           frmvisualizanotapedido.ReportViewer1.ServerReport.ReportServerUrl = New System.Uri("ip/reportserver")

       Else

           frmvisualizanotapedido.ReportViewer1.ServerReport.ReportServerUrl = New System.Uri("ip/reportserver")

       End If

       Dim total As Integer = frmvisualizanotapedido.ReportViewer1.ServerReport.GetDataSources().Count

       Dim permisos(total) As DataSourceCredentials

       Dim datasources As ReportDataSourceInfoCollection = frmvisualizanotapedido.ReportViewer1.ServerReport.GetDataSources()

       For i As Integer = 0 To total - 1

           permisos(i).Name = datasources(i).Name

           permisos(i).UserId = "xyxyyx/administrador"

           permisos(i).Password = "yyxyxyx"

       Next

       frmvisualizanotapedido.ReportViewer1.ServerReport.SetDataSourceCredentials(permisos)

       frmvisualizanotapedido.ReportViewer1.Refresh()

       frmvisualizanotapedido.ReportViewer1.Update()

es una de las formas que estuve probando pero no me correo ahi te envio otro ejemplo pero si me corre como administrador mas no me corre como otro usuario

frmvisualizanotapedido.ReportViewer1.ProcessingMode = ProcessingMode.Remote

       'Dim serverReport As ServerReport

       'serverReport = frmvisualizanotapedido.ReportViewer1.ServerReport

       'Dim credentials As System.Net.ICredentials

       'credentials = System.Net.CredentialCache.DefaultCredentials

       'Dim rsCredentials As ReportServerCredentials

       ' rsCredentials = serverReport.ReportServerCredentials

       'rsCredentials.NetworkCredentials = credentials

       'If nombredominio = "xyz.com" Then

       ' ServerReport.ReportServerUrl = New Uri("ip/reportserver")

       'Else

       'ServerReport.ReportServerUrl = New Uri("ip/reportserver")

       'End If

       'ServerReport.ReportPath = "/informes/notapedido"

       'ServerReport.Refresh()

       'If exportar = "S" Then

       'Dim warnings As Warning() = Nothing

       'Dim streamids As String() = Nothing

       'Dim mimeType As String = Nothing

       'Dim encoding As String = Nothing

       'Dim extension As String = Nothing

       'Dim bytes As Byte()

       'bytes = ServerReport.Render("Excel", Nothing, mimeType, encoding, extension, streamids, warnings)

       'Dim fs As New FileStream(ruta & nombrearchivo, FileMode.Create)

       'fs.Write(bytes, 0, bytes.Length)

       'fs.Close()

       'adjuntar_email(ruta & nombrearchivo)

       'End If

       'cmdvisualizar.Enabled = False

       'cmdemail.Enabled = False

       'txthasta.Text = ""

       'txthasta.Enabled = False

       'txtdesde.Text = ""

a ver si me ayudas en este problema

Att.

Jusein Quevedo Cabrera

Computo Agrodoral S.A.

# October 18, 2007 10:24 PM

Fran Díaz ha opinado:

Hola jquevedo,

¿que error te marca?

Un Saludo

# October 18, 2007 11:17 PM

jquevedo ha opinado:

hola fran mira el error que me marca es cuando quiero mostrarlo en el lado del cliente y me dice !!! no tiene los suficientes privilegios erroraccess!!!

cuando lo muestro en lado del cliente.

Att.

Jusein

# October 19, 2007 1:23 AM

Fran Díaz ha opinado:

Hola jquevedo,

Tienes que entrar en el servidor de informes y darle permisos a ese usuario, para que cuando este usuario acceda al servidor de informes pueda entrar.

Un Saludo

# October 19, 2007 8:55 AM

jquevedo ha opinado:

Buenos dias fran disculpa mi ignorancia me puedes dar una ayuda al respecto en que parte le doy los permisos en SQL, IIS, o windows si fueras tan amable de darme los pasos te agradeceria muchismo.

Att.

JQC

# October 19, 2007 3:43 PM

Fran Díaz ha opinado:

Hola jquevedo,

Entra en el servidor de informes, entra en propiedades y ahí te aparecen los permisos. Agrega tu máquina(la del cliente) y listo.

Un Saludo

# October 19, 2007 8:00 PM

Reynaldo Ruiz ha opinado:

Si es en forma local he proadolo en Visual 2005 y me da un error de excepcion.

revisando el Object viewer parece que recibe los mismos parametros.

Varia algo al hacerlo de en uninforme local?

# October 28, 2007 4:05 AM

Fran Díaz ha opinado:

Hola Reynaldo,

Debería de irte, ¿como lo pones exactamente?

Un Saludo

# October 29, 2007 3:46 PM

FERNANDO ha opinado:

Hola, la verdad que soy muy nuevo en esto de los reportes. Tengo que sacaruno urgente y estoy un poco perdido. Mi informe es local.Lo que quiero es cargar el informe a mano usando SqlDataAdapter, dataSet, etc.

Como hago para desde el form asignarle al reportViewer el reporte1.rdlc??? Y como hago para asignar desde el form los campos que me trajo el dataSet a los text que agregue al Reporte1.rdlc?

Muchas gracias por la ayuda

# November 8, 2007 12:24 PM

FERNANDO ha opinado:

Hola, la verdad que soy muy nuevo en esto de los reportes. Tengo que sacar uno urgente y estoy un poco perdido. Mi informe es local.Lo que quiero es cargar el informe a mano usando SqlDataAdapter, dataSet, etc.

Como hago para desde el form asignarle al reportViewer el reporte1.rdlc??? Y como hago para asignar desde el form los campos que me trajo el dataSet a los text que agregue al Reporte1.rdlc?

Muchas gracias por la ayuda

# November 8, 2007 12:30 PM

Fran Díaz ha opinado:

Hola Fernando,

Los campos los creas en el informe, cuando crees los campos desde tu form, estos al pasarlos al informe deben de coincidir con los que ya hay en el informe, ¿entiendes?.

Para agregar una fuente de datos como puede ser un dataset, puedes hacer esto:

reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NombreDeTutabla", DataSet));

Para agregar tu informe al control ReportViewer, tan solo tienes que poner esta línea: reportViewer1.LocalReport.ReportPath = "TuRuta\reporte1.rdlc"

Un Saludo

# November 14, 2007 4:57 PM

FERNANDO ha opinado:

Hola Fran, gracias por tu ayuda, ya logre que funcionara el reporte.

Ahora el problema que se me presenta es que no puedo mostrar un subReporte. Si el subReporte lo cargo como informe principal en el reportViewer, este me lo muestra correctamente, pero al cargarlo como subReporte me dice lo siguiente: "Error: no se  puede mostrar el informe integrado".

La verdad que he intentado de todo y no logro hacerlo funcionar. La informacion que aparece en internet no me resulta clara.

Me gustaria por favor, si pudieras ayudarme con esto y mostrarme un ejemplo de como hacerlo, ya que es el ultimo paso que me falta para terminar un programa.

Muchas gracias por tu tiempo.

Saludos

# November 15, 2007 11:55 AM

Fran Díaz ha opinado:

Hola Fernando,

Mira a ver si este artículo te ayuda: geeks.ms/.../crear-un-informe-con-un-subinforme-en-ssrs.aspx

Un Saludo

# November 22, 2007 12:27 AM

Javier ha opinado:

Hola. Estoy buscando como cargar un reporte en el reportviewer que tengo en por ejemplo "C:\Report1.rdl"... ¿Es necesario instalar un servidor de reportes en la maquina cliente?¿Donde puedo descargar el servidor de reportes?¿Es lo mismo un servidor de reportes que SQL server 2005 express?

Muchas gracias

# December 12, 2007 5:11 PM

Fran Díaz ha opinado:

Hola Javier,

Vamos a ver, hay dos tipos de informes, uno que se ejecuta de forma local y que no necesita servidor de informes y otro en servidor. Cuando creas el de servidor que veo que es tu caso, es para meterlo en el servidor de informes que trae sql server. Tanto en la versión express como en las superiores. En la versión express tendrás que descargar un paquete adicional.

¿Quieres utilizar tu actual informe de forma local?, pues cambia la extensión a rdlc y ya podrás utilizarlo como un informe local, ya que por debajo es xml específico para reporting services y el report viewer se encargará de entenderlo  y renderizarlo.

Para utilizar el ReportViewer en cualquier máquina, necesitas bajarte unas dlls que vienen en forma de .exe y ellas mismas se instalan en el directorio adecuado. Te dejo un enlace a ella:

geeks.ms/.../microsoft-report-viewer-distributable-2005-sp1.aspx

También he creado una serie de artículos donde explico como hacer informes de forma local y de servidor y algunos trucos para trabajar con ellos. Te dejo el enlace también: geeks.ms/.../reporting-services-in-visual-studio-2005-i-iii.aspx

Por ahora solo está el primero y en las siguientes semanas iré posteando los demás.

Espero que te ayude la información,

Un Saludo

# December 22, 2007 4:06 PM

Subreportes ha opinado:

Hola tengouna duda quiero saber si se puede agregar subreportes en tiempo de ejecucion es decir por ejemplo tengo un reporte PERSONAL q siempre debera aparecer pero tngo uno de asistencias y otro de sueldos, pero el usuario indica cual quiere o si quiere ambas opciones entonces quiero poder agregar un subreporte al pie de la pagina, no se si eso se pueda???

Otra idea q tengo es hacer todo en un solo reporte y poder suprimir las partes q no me pidio el usuario cosa q creo es mas sencilla pero no tengo la menor idea de como suprimir grupos.........

Podrian ayudarme??

Sonia

# January 7, 2008 4:11 AM

Jmardo ha opinado:

Quisiera agradecerte por muy buen aporte.

quisiera consultarte si en un ReportViewer le puedo enviar a nivel de codigo el Conexion strig de un ReportServices y tambien si puedo manipular la impresion a nivel de codigo quisira poder cambiarle los margenes y no le encuentro por donde.

# January 7, 2008 4:42 PM

Jmardo ha opinado:

Otra consulta sucede que tengo el servidor con sql2000 en mi maquina con 2005 y trabajando con .net 2005

he tratado de levantar los reportes con el codigo publicado aqui pero no me funciona sera algo de compatibilidad con sql2000

Gracias

# January 7, 2008 9:55 PM

Fran Díaz ha opinado:

Hola Jmardo,

Puedes mandarle la cadena de conexión si la mandas a través de un parámetro.

Para imprimir un informe y cambiarle los márgenes y otras cosas en tiempo de ejecución

puedes hacerlo tal como explican aquí:

forums.microsoft.com/.../ShowPost.aspx

o esta otra: forums.microsoft.com/.../ShowPost.aspx

¿Con que versión trabajas de Reporting Services?.

Un Saludo

# January 8, 2008 9:43 AM

Fran Díaz ha opinado:

Hola subreportes,

Puedes agregar un parámetro de tipo check y con un iif decirle que subinforme vas a utilizar.

Lo de agregar un subreporte al pie del informe va a ser que no, eso sí lo puedes incluir dentro del body debajo de todos los elementos.

Para lo de los grupos, no te entendí bien, pero puedes con un(o varios) parámetro controlar la visibilidad de los elementos.

Bueno, ya me contarás.

Un Saludo

# January 8, 2008 10:16 AM

Fran Díaz ha opinado:

En este post voy a explicar algo que ya he podido nombrar seguro en alguno que otro post, pero a nivel

# January 14, 2008 10:13 AM

fernando ha opinado:

hola Fran.

yo tengo un reporte armado sobre reportserver (2005). quiera agregarle parámetros... al menos uno, por ejemplo dni del cliente, y que el browser me muestre el detalle de la cuenta del cliente.

Te comento, yo estoy trabajando sobre una base de datos sql 2005 st. no manejo la parte de los aplicativos, aca los desarrolladores estan haciendo un aplicativo para intranet con vb6. lo que yo quiero es hacer una especie de demo, de las posibilidades de sql 2005.

quisiera armar una pequeña pagina en asp.net (si es con c# mejor) donde tenga un label y una caja de texto para ingresar el DNI, y un boton que le mande el parametro DNI al server y este me muestre el reporte en el server.

Gracias desde YA.

flprincicharrobargmailpuntincom

# January 21, 2008 7:18 PM

FERNANDO ha opinado:

Hola Fran, tengo el siguiente error cuando quiero en un informe mostrar campos de diferentes tablas. Este error se muestra por cada campo. No se que es un ambito ni como lo declaro. Gracias por la ayuda

Error 1 La expresión Value del objeto ‘Fecha’ de tipo textbox utiliza una expresión de agregado sin ámbito. Se necesita un ámbito para todos los agregados que se utilizan fuera de una región de datos, a menos que el informe contenga exactamente un conjunto de datos.

# January 21, 2008 7:40 PM

Fran Díaz ha opinado:

Hola fernando,

Puedes bajarte la versión de visual web developer y utilizar el control reportviewer para ello Big Smile. ¿Te vale esa opción?. Con esta opción podrías llamar tu página aspx con tu label, tu botón y mostrarlo en la misma u otra con el reportviewer.

Puedes descargar esta herramienta gratuita desde aquí:

www.microsoft.com/.../default.mspx

Ya me contarás.

Un Saludo

# January 22, 2008 9:45 AM

Fran Díaz ha opinado:

Hola FERNANDO,

¿Qué expresión pusistes en los values de cada caja de texto de la tabla?.

Un Saludo

# January 22, 2008 9:47 AM

Carlos A. ha opinado:

Hola,

Tengo un problema al llamar a otro reporte diferente en tiempo de ejecucion. Cuando es local lo soluciono pero cuando es de forma remota no... el metodo para el llamado local de otro reporte en tiempo de ejecucion que utilizo es

RptViewerData.LocalReport.DataSources.Clear();

pero si es Remoto no encuentro algún metodo asi cuando actualizo el control no me funciona, no me sale inf. solo la barra donde sale un link Change Credentials. (todo es independiente tengo un metodo donde le cambio las credenciales y los parametros es del mismo servidor y son las mismas credenciales)

Espero que me puedas ayudar.

Gracias...

# January 23, 2008 2:44 PM

Carlos A. ha opinado:

Hola,

Tengo un problema al llamar a otro reporte diferente en tiempo de ejecucion. Cuando es local lo soluciono pero cuando es de forma remota no... el metodo para el llamado local de otro reporte en tiempo de ejecucion que utilizo es

RptViewerData.LocalReport.DataSources.Clear();

pero si es Remoto no encuentro algún metodo asi cuando actualizo el control no me funciona, no me sale inf. solo la barra donde sale un link Change Credentials. (todo es independiente tengo un metodo donde le cambio las credenciales y los parametros es del mismo servidor y son las mismas credenciales)

Espero que me puedas ayudar.

Gracias...

# January 23, 2008 2:44 PM

FERNANDO ha opinado:

Hola Fran, la expresion de los values es por ejemplo para el campo FECHA: =First(Fields!Fecha.Value)

Cabe destacar que el programa no corre en web sino que está programado en c# para Windows. Ahi utilizo el report viewer, los nformes son locales.

Al mostrar un informe que contiene datos de una sola tabla me los muestra correctamente, pero no se porque al intentar mostrar datos de varias tablas me da ese error, me repite ese error por cada campo que quiero mostrar.

# January 23, 2008 3:07 PM

rolandodt ha opinado:

Hola Fran, tengo un reporte que tengo enlazado a una tabla de mi base de datos, y funciona de maravilla, la situación es: Tengo un procedimiento almacenado en slq serverf 2000, que recibe 2 parámetros y fucciona como yo lo necesito; en visual basic .net 2005 genero un reporte y lo conecto a este procedimeinto almacenado, ahora como le hago para pasr los parámetros que genero en un formulario, y si se pasan al reportviewer o al procedimiento almacenado?

Saludos

# January 23, 2008 6:49 PM

FERNANDO ha opinado:

Hola Fran, ya he solucionado el error que me daba al poenr campos de distintas tablas. El problema era el

!First en la declaracion. Le saque eso y no me da mas ese error. Pero ahora no se como hacer para cargar ese subReport con los valores de las distintas tablas. Hasta ahora cuando tengo un subReport con una sola tabla utilizo la siguiente linea:  

e.DataSources.Add(new ReportDataSource("GestionRuralDataSet_Negocio", oNegocio));

Como veras, primero le paso el dataSet, y luego la tabla. Asi que el problema es que no se como indicarle que tengo dos tablas para que cargue y no solo una.

Muchas Gracias

# January 24, 2008 1:10 PM

FERNANDO ha opinado:

Hola Fran, estoy en el ultimo paso para poder imprimir mi reporte, iuujuu :).

El problema que tengo, y que ya he leido en el blogg es que no se como hacer para que el reportViewer por defecto me imprima en A4. en el momento por defecto sale en carta. Estoy programando una aplicacion para windows en c sharp 2005.

Agradezco tu ayuda

Muchas gracias

# January 29, 2008 3:29 PM

Fran Díaz ha opinado:

Hola a todos,

Carlos A, Ya te contesto en otro post, pero te lo repito ya que veo que es la primera vez que vienes. Normalmente, suelo contestar a los comentarios una vez por semana debido al tiempo y la cantidad de usuarios que escribíis Smile(se agradece).

Te explico una cosita, la sentencia RptViewerData.LocalReport.DataSources.Clear(); lo que hace es borrar la fuente de datos de un informe y no llamar a un subinforme.

Probablemente no tengas el informe en el mismo sitio de donde lo llamas desde el informe. Me refiero a si estás con informe y subinforme.

Para el tema de las credenciales, se los puedes pasar tú al reportviewer tal como explico en este otro post:

geeks.ms/.../configurando-seguridad-desde-el-reportviewer.aspx

Fernando, Creo que al penúltimo y ultimo post te funcionó ya ¿no?. Para que el informe te imprima por defecto en a4 tienes que ponerlo en las propiedades del informe en tiempo de diseño. Por defecto el control reportviewer te imprime el informe tal como lo tengas definido, si es como carta, pues en carta, si es en A4 pues en A4. ¿Comprendes?.

rolandodt, pásalos tal como explico en este post. Te creas los parámetros, los pillas del formulario y se los envias.¿Me expliqué o no te entendí bien?.

Un Saludo

# January 31, 2008 3:26 PM

Ivan Casas ha opinado:

Hola buen dia,Estoy realizando un reporte al cual quiero enviarle un parametro desde una aplicacion asp.net pero no consigo que el reporte me carge este parametro, me aparece el mensaje

Falta un valor en el parámetro 'VWUsuariosUsuSerie'

El ReportViewer esta contenido en una pagina aspx

El siguiente codigo está en el init de la pagina aspx

Dim keyserver As String = AppSettings("repserver")

Me.ReportViewer1.ServerReport.ReportPath="/PPReports/RecargasPVUIndividual"

           Me.ReportViewer1.ServerReport.ReportServerUrl = New System.Uri("http://" & keyserver & "/reportserver/")

Dim parametros As New List(Of ReportParameter)

parametros.Add(New ReportParameter("VWUsuariosUsuSerie", Request.Params("s").Trim, False))

ReportViewer1.ServerReport.SetParameters(parametros)

Gracias de Antemano.

# February 9, 2008 12:23 AM

Lenin ha opinado:

Hola

Primero felicitaciones por la gran información que brindas.

Segundo tengo una pregunta, tengo un reporte, no tiene parámetros, así que hago la llamada al reporte tal como indicas pero sin la parte de los parámetros, pero en vez de abrir el reporte me abre el servidor de reportes, como si en el explorador ubira puesto http://localhost/reports

Anticipo mi agradecimiento por tu ayuda.

Saludos

Lenin

# February 15, 2008 10:44 PM

Fran Díaz ha opinado:

Hola,

Ivan Casas, ¿Has probado a ver que el parámetro que le pasas tiene valor?.

Lenin, es curioso lo que te pasa, al pasar la url,¿no le pondrás por casualidad la extensión verdad?

Un Saludo

# February 17, 2008 1:48 PM

Lenin ha opinado:

Hola,

Gracias por la respuesta, no, no le llamo con la extensión, el código es el siguiente:

//rvReporte es el Report Viewer

rvReporte.ServerUrl = "http://Servidor/Reports";

rvReporte.ReportPath = "rptGarantia";

rvReporte.Visible = true;

Saludos

Leni

# February 18, 2008 3:56 PM

Fran Díaz ha opinado:

Hola Lenin,

Añade la línea rvReporte.RefreshReport() para que el control se refresque y muestre el infome.

Un Saludo

# February 22, 2008 12:36 PM

Jorge Conil ha opinado:

Esto va a sonar muy tonto, pero no lo he podido resolver:

Estoy en una aplicacion de VB.NET tengo un reporte local, le configuré un solo parametro y cuando se lo quiero pasar desde el form:

Dim Parametro As New ReportParameter(xx,vv)

Me da un error de que "ReportParameter" no está definifo...

Que NameSpace tengo que importar???

# February 22, 2008 12:58 PM

Fran Díaz ha opinado:

Hola Jorge,

Prueba a poner esto:

Dim Parametro As New  Microsoft.Reporting.WinForms.ReportParameter(xx,vv)

Un Saludo

# February 22, 2008 1:11 PM

Jorge Conil ha opinado:

Fran

Gracias por la pronta respuesta, lo he hecho y cuando lo ejecuto y quiere cargar el reporte me da un error que dice:

"No se puede convertir un objeto de tipo

'Microsoft.Reporting.WinForms.ReportParameter' al tipo

'System.Collections.IEnumerable´¨1[Microsoft.Reporting.WinForms.ReportParameter]'."

Que me falta???

# February 22, 2008 1:38 PM

Fran Diaz ha opinado:

En este post voy a explicar algo que ya he podido nombrar seguro en alguno que otro post, pero a nivel

# February 22, 2008 2:39 PM

Jorge Conil ha opinado:

Hola de nuevo Fran,

Gracias por la sugerencia, he probado lo que me dijiste y ahora cuando ejecuto la aplicacion me da otro mensaje de error que dice:

No se puede convertir un obejeto de tipo

'Microsoft.Reporting.WinForms.ReportParameter' al tipo

'System.Collection.Generics.IEnumerable`1[Microsoft.Reporting.WinForms.ReportParameter]'.

Que me está faltando???

Jorge C.

# February 22, 2008 6:38 PM

Mauro Canosa ha opinado:

Fran, siguiendo tu ejemplo, no me funciona el pasaje de parámetros. No me tira error ni nada, pero no me muestra en el report viewer la información. En realidad, el parámetro se lo debe pasar bien, porque si yo le pongo otro nombre me tira la excepción que corresponde. Copio el código (el valor del parámetro al momento de setearlo es correcto)

Muchas Gracias

CODIGO:

//IDENTIFICO EL REPORT SERVER A CARGAR

       Uri tUri = new Uri(@"http://mcm/reportserver$SqlExpress");

       this.rvrManifiesto.ServerReport.ReportServerUrl = tUri;

       this.rvrManifiesto.ServerReport.ReportPath = @"/Proyecto de informe2/rptManifiestoPrint";

       ReportExecution.ReportExecutionService RSGuardar = new ReportExecution.ReportExecutionService();

       // Asigno las credenciales

       RSGuardar.Credentials = System.Net.CredentialCache.DefaultCredentials;

       // Cargo el report.

       string history = null;

       //LE PASO VALORES A LOS PARAMETROS

       // Creo una colección de parámetros de tipo ReportParameter

       // para añadirlos al control ReportViewer.

       List<ReportParameter> parametros = new List<ReportParameter>();

       // Añado los parámetros necesarios.

       // Creo uno o varios parámetros de tipo ReportParameter con sus valores.

       ReportParameter parametro = new ReportParameter("idManifiesto");

       parametro.Values.Add(nIdManifiesto.ToString());

       parametro.Visible = false;

       parametros.Add(parametro);        

       // Añado el/los parámetro/s al ReportViewer.

       this.rvrManifiesto.ServerReport.SetParameters(parametros);

       ReportExecution.ExecutionInfo EI= RSGuardar.LoadReport(this.rvrManifiesto.ServerReport.ReportPath, history);

# February 22, 2008 6:59 PM

Fran Díaz ha opinado:

Hola Jorge Conil,

¿No te funciona como te dije?.

Pues que raro. Mira:

'Creo uno o varios parámetros de tipo ReportParameter con sus valores.

       Dim parametro As New Microsoft.Reporting.WinForms.ReportParameter("NombreDelParámetro", "Valor o Array de valores")

       ' Añado uno o varios parámetros(En este caso solo uno al ReportViewer

       Me.ReportViewer1.ServerReport.SetParameters(parametro)

¿Te da error al compilar o al ejecutar?

Un Saludo

# February 26, 2008 1:06 PM

Fran Díaz ha opinado:

Hola Mauro Canosa,

Ponel al final del código esta línea:

MiReportViewer.RefreshReport();

Un Saludo

# February 26, 2008 1:08 PM

Mauro Canosa ha opinado:

Fran, no tengo ese método (estoy con web forms y el report viewer), por lo que, probé con poner:

this.rvrManifiesto.ServerReport.Refresh();

pero tampoco me funciona....

Muchas Gracias

# February 26, 2008 10:02 PM

Mauro Canosa ha opinado:

Fran, encontré por qué no estaba funcionando, y, era por que tenía que setear el Atributo ProcessingMode en Remote.

Muchas Gracias y excelente lo tuyo!!

Saludos

# February 26, 2008 10:15 PM

Jorge Conil ha opinado:

Hola Fran

Me daba un error cuando se ejecutaba, pero lo solucioné declarando el parametro de esta manera:

Dim Parametro As New List(Of ReportParameter)

Parametro.Add(New ReportParameter("ParameterQTY", vbleQTY))

Gracias!

# March 3, 2008 5:54 PM

José Carrasco M. ha opinado:

Hola Frank, interesante articulo, como puedo crear o configurar un reporte para que trabaje con mi capa de negocio y no directamente con la BD (select o sp).

Atte.

# March 5, 2008 6:41 PM

cgomez ha opinado:

Hola Fran quisiera hacerte una pregunta.

Resulta que en mi reporte necesito agrandar el tamaño de los parametros, ya que por una cosa de performance no es lo mas apropiado, intente modificarle el XML pero al momento de hacer Preview me sale error, obiamente no me resulta o simplemente no lo hecho de la manera correcta.

Agradeciendo tu respuesta , saludos..

# March 5, 2008 7:06 PM

Fran Díaz ha opinado:

Hola José Carrasco M,

Interesante lo que preguntas. ¿Te refieres a pasarlo como un objeto?. Si es así, ya está apuntado en mi lista para postearlo. Se qué lo necesitarás ya, pero... no tengo más manos Sad.

Un Saludo

# March 6, 2008 1:38 PM

Fran Díaz ha opinado:

Hola cgomez,

Te puedes explicar un poco más, no entendí bien lo que quieres hacer Sad

Un Saludo

# March 6, 2008 1:39 PM

cgomez ha opinado:

Hola Fran disculpa por no explicarme bien en el post anterior.

Mi problema aun no lo soluciono, se trata de los parameters reports, el tamaño que me refiero es a modo diseño, el width como podria ser un texbox.

Me estan pidiendo que sean mas largos, ya que al momento de hacer preview con ellos una vez subidos a la pagina, no son legibles, no se entiende la informacion del parametro a seleccionar en mi reporte.

Espero haber sido claro y te agradesco el hecho de querer ayudarme.

Gracias.

# March 7, 2008 3:57 PM

Fran Díaz ha opinado:

Hola cgomez,

Me imagino que te refiernes a que el textbox de donde se meten los parámetros sea más ancho, ¿no?. Puedes

crearte tus propios textbox en una aplicación a tu medida y que estos se pasen luego por código el informe Wink.

Un Saludo

# March 17, 2008 7:46 PM

Lucy ha opinado:

Hola fran.. te escrito en otras ocasiones y necesito tu ayuda nuevamente... quiero saber si hay alguna forma de pasar como parametro el origen de datos en mi reporte, lo que pasa es que uso diferentes bases de datos y quiero pasarle desde VB .NET el parametro a que DATASET quiero que se conecte y como obtener el parametro o cacharlo en el reporte... espero me ayudes, muchas gracias...

# March 18, 2008 9:42 PM

Fran Díaz ha opinado:

Hola Lucy,

¿Me puedes explicar un poco más como trabajas?. Es decir, ¿informes locales o de servidor?

si es verdad que no se puede hacer lo que quieres de un forma sencilla. Yo pasaría un xml al informe y un dataset. Estos ya irían rellenos con los datos y el informe ya los presentaría como tal. El como rellenarlo ya tendrías tú que currartelo [;)].

Ya me contarás que tal.

PD: Si no quieres ver cuando salen los comentarios, puedes suscribirte al RSS de comentarios o suscribirte a un determinado artículo(necesitas registrarte antes como usuario del sitio).

Un Saludo

# March 19, 2008 10:35 AM

Lucy ha opinado:

Hola de nuevo, si te comento mis reportes estan en el servidor, y lo que quiero hacer es por medio de paramentros yo le indique con que origen de datos quiero que trabajen mis reportes, he leido y me encontrado con el archivo xml, pero a lo que leido solo puedo pasar el nombre del servidor y el nombre de la base de datos a donde quiero que se conecte, pero no el nombre del origen de datos a donde quiero que se conecte, bueno espero que me puedas ayudar muchas gracias :d lucy.

# March 19, 2008 6:39 PM

teresa ha opinado:

Private Sub Cargar()

       Dim instance As New ReportParameter("Fecha", "15/08/2008")

       'Dim instance1 As New Microsoft.Reporting.WebForms.ReportParameter("Fecha", "15/08/2008")

       'Dim instance2 As New Microsoft.Reporting.WebForms.ReportParameter("Ordenadopor", "01")

       Dim prms(0) As Microsoft.Reporting.WebForms.ReportParameter

       prms(0) = instance

       '       prms(1) = instance1

       '        prms(2) = instance2

       ReportViewer1.ServerReport.ReportServerUrl = New Uri("sdesarrollo1/.../")

       ReportViewer1.ServerReport.ReportPath = "/EventosDeportivos/Eventos/Análisis de los Resultados por Día"

       ReportViewer1.ServerReport.SetParameters(prms)

       ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote

       ReportViewer1.ServerReport.Refresh()

   End Sub

   Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

       Cargar()

   End Sub

Hola este es el codigo que tengo implementado en una pagina aspx con un boton y un reportviewer, y esta pagina no funciona porque se produce un error ya que no envia el parametro en la instruccion ReportViewer1.ServerReport.SetParameters(prms)

# April 1, 2008 2:32 PM

Carlos ha opinado:

Hola, Fran.  Como estas?.  Gracias por toda la inforamción tan valiosa que pones, soy nuevo en esto de reportin services, pero he encontrado cosas muy valiosas e interesantes en tus articulos.  Queria preguntarte sobre el paso de parametros al ReportViewer, sigo tu ejemplo, pero me da este error, queria saber como puedo solucionarlo.

No se puede convertir un objeto de tipo 'Microsoft.Reporting.WebForms.ReportParameter' al tipo 'System.Collections.Generic.IEnumerable`1[Microsoft.Reporting.WebForms.ReportParameter]'.

Gracias, saludos

Atte

Carlos

# April 1, 2008 7:14 PM

cesarmontero ha opinado:

Hola Fran como estas, tengo un pequeno problema estoy tratando de pasar unos parametros al reporte pero el mismo no me lo muestra te muestro un poco el codigo de lo que estoy haciendo.

if (ReportToGet.ReportParameter.Count > 0)

       {

           List<ReportParameter> parameters = new List<ReportParameter>();

           foreach (reportParameter param in ReportToGet.ReportParameter)

           {

               SqlDataAdapter DAParam = new SqlDataAdapter(param.DataSet[0].Query, conReport);

               DataSet dsParam = new DataSet();

               DAParam.Fill(dsParam, "Param");

               DataTable DT = dsParam.Tables["Param"];

               string[] paramValues = new string[DT.Rows.Count];

               int i = 0;

               foreach (DataRow DR in DT.Rows)

               {

                   paramValues[i] = DR[0].ToString();

                   i++;

               }

               parameters.Add(new ReportParameter("param1", paramValues));

               ReportViewer3.LocalReport.SetParameters(parameters);

           }

       }

       ReportViewer3.LocalReport.Refresh();

Alli lo que hago es traerme los datos de la tabla y la agrego en el ReportParameter pero al momento de mandar a ejecutar el reporte no me muestra nada solo el reporte con los datos pero sin el parametro.

# April 8, 2008 9:28 PM

sole ha opinado:

hola fran

segui tus pasos y logre que de una pagina me mande a un reporte con los parametros listos (paso de parametros por codigo).hasta ahi todo bonito

el problema es que cuando lo subo a la web me sale el siguiente error

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

cual podra ser el error ayudame , ya me tiene loca

un saludo y gracias

# April 15, 2008 7:59 PM

Fran Díaz ha opinado:

Hola a tod@s,

Estoy contestando todos los comentarios en los foros de MSDN. Más información del porque la podéis encontrar aquí:geeks.ms/.../191-adi-243-s-a-los-comentarios-en-el-blog.aspx

Un Saludo

# April 26, 2008 10:14 AM