no he hecho nunca un informe con crystal reports
tengo una aplicación vbasic.net 2008 que rellena un datagridview, y me gustaria la opción de poder imprimir estos mismos datos en un informe
please help, thanks
no he hecho nunca un informe con crystal reports
tengo una aplicación vbasic.net 2008 que rellena un datagridview, y me gustaria la opción de poder imprimir estos mismos datos en un informe
please help, thanks
Hola!
acabé de hacer un post enorme aquí para ver si podía ayudarte y se me fue la conexión al darle a post reply y lo perdí. A ver si luego a la tarde puedo ponerte de nuevo todo lo que había puesto.
Un saludo
A ver, te había puesto algo como lo siguiente. De hecho, algo de prueba que yo hice siguiendo un ejemplo en una web, dado que no suelo trabajar con informes.
1. Añade un form a tu proyecto o a uno de prueba, y arrastra y acoplalo al formulario un crystalReportViewer.
2.Crea un origen de datos con el select que necesites....
3. Añade un archivo de crystalreport en blanco, verás que consta de:
a.Encabezado del informe
b.Encabezado de la página
c.Detalles
d.Pie del informe
e.Pie de la página
Supongamos un ejemplo típico de facturas, donde queremos que aparezca el código del artículo, su descripción, el precio, el descuento y el importe total... sólo tendrás que arrastrar del origen de datos que creaste con el asistente, los campos que necesites a la parte de detalles... ponlos en una fila... y cuando lo ejecutas, aunque tú sólo veas esa fila, el pondrá todas las filas que haya en el resultado de tu select, dejando entre ellas el espacio que tu dejes hasta el siguiente apartado del report (que en este caso es Pie del Informe)
En los otros apartados, no hace mucha falta explicar, en encabezado de página pondrás el logo corporativo supongo, el el pie del informe la típica barra horizontal con el desglose del iva y el total de la factura... etc.
Ya tienes tu informe. Sólo necesitas jugar con las propiedades para que tenga la apariencia que tu quieras. Si no lo tienes en una base de datos la información, puedes pasarla a campos no enlazados (parámetros) que en el código que pongo a continuación para completar el ejemplo verás...
4. En el evento Load del formulario, ponemos lo siguiente (si alguien conoce una manera mejor de enlazar el report al formulario que me lo diga para mejorar mi código porque esto viene del ejemplo d ela web):
c.ConnectionString = [color=#a31515 size=2][color=#a31515 size=2]"tu cadena de conexión"[/color][/color]
command.Connection = c
command.CommandText = [color=#a31515 size=2][color=#a31515 size=2]"SELECT presupuestos.Presupuesto, presupuestos.Cliente, presupuestos.Nombre, presupuestos.PersContacto, presupuestos.Tel, presupuestos.Email, "[/color][/color] _
& [color=#a31515 size=2][color=#a31515 size=2]"presupversiones.Nombre AS nomVers, presuptraducciones.Traduccion, presuptraducciones.Texto, presuptraducciones.Cantidad, presuptraducciones.Dto1, "[/color][/color] _
& [color=#a31515 size=2][color=#a31515 size=2]"presuptraducciones.Dto2, presuptraducciones.Importe, presupversiones.Importe AS importeVers, presupTraducciones.Notas "[/color][/color] _
& [color=#a31515 size=2][color=#a31515 size=2]" From presupuestos "[/color][/color] _
& [color=#a31515 size=2][color=#a31515 size=2]"INNER JOIN presupversiones ON presupversiones.Presupuesto = presupuestos.Presupuesto "[/color][/color] _
& [color=#a31515 size=2][color=#a31515 size=2]"INNER JOIN presuptraducciones ON presuptraducciones.Version = presupversiones.VersionId "[/color][/color] _
& [color=#a31515 size=2][color=#a31515 size=2]"WHERE(presupversiones.Activa = 1) AND (presupuestos.Presupuesto = ?Presupuesto)"[/color][/color]
[color=#0000ff size=2][color=#0000ff size=2]Try[/color][/color]
c.Open()
da.SelectCommand = command
da.Fill(dt)
[color=#0000ff size=2][color=#0000ff size=2]Catch[/color][/color] ex [color=#0000ff size=2][color=#0000ff size=2]As[/color][/color] Exception
MsgBox(ex.ToString)
[color=#0000ff size=2][color=#0000ff size=2]End[/color][/color] [color=#0000ff size=2][color=#0000ff size=2]Try[/color][/color]
[color=#0000ff size=2][color=#0000ff size=2]Dim[/color][/color] info [color=#0000ff size=2][color=#0000ff size=2]As[/color][/color] [color=#0000ff size=2][color=#0000ff size=2]New[/color][/color] crPresupReportIva 'creo una instancia del report, que en mi caso se llama crPresupReportIva
info.SetDataSource(dt) 'le digo cual es el datasource del report
CrystalReportViewer1.ReportSource = info 'asocio el report al reportviewer
info.DataDefinition.FormulaFields([color=#a31515 size=2][color=#a31515 size=2]"txtIva"[/color][/color]).Text = [color=#a31515 size=2][color=#a31515 size=2]"16"[/color][/color] [color=#008000 size=2][color=#008000 size=2]'Si no quieres un valor fijo, puedes pasarle un parámetro que traigas[/color][/color]
[color=#0000ff size=2][color=#0000ff size=2]Dim[/color][/color] impIva [color=#0000ff size=2][color=#0000ff size=2]As[/color][/color] [color=#0000ff size=2][color=#0000ff size=2]Double[/color][/color] = (16 * dt.Rows(0).Item([color=#a31515 size=2][color=#a31515 size=2]"importeVers"[/color][/color]).ToString) / 100
info.DataDefinition.FormulaFields([color=#a31515 size=2][color=#a31515 size=2]"txtImporteIva"[/color][/color]).Text = Str(Round(impIva, 2))
[color=#0000ff size=2][color=#0000ff size=2]Dim[/color][/color] total [color=#0000ff size=2][color=#0000ff size=2]As[/color][/color] [color=#0000ff size=2][color=#0000ff size=2]Double[/color][/color] = Round(impIva, 2) + dt.Rows(0).Item([color=#a31515 size=2][color=#a31515 size=2]"ImporteVers"[/color][/color]).ToString
info.DataDefinition.FormulaFields([color=#a31515 size=2][color=#a31515 size=2]"txtTotal"[/color][/color]).Text = Str(Round(total, 2))
Notas:
Los formulaFields son los campos no enlazados que te comentaba, es decir, que si tú quieres sacar los datos en tiempo de ejecución y no de una base de datos, puedes hacerlo así. Aquí fíjate que el select tiene que traer los mismos campos que hayas traido en el origen de datos en tiempo de diseño (por eso creo que tiene que haber una forma mejor) dado que arrastraste los campos al report para crearlo.
Espero que te sirva de guía, cualquier pregunta, coméntala.
Un saludo!