2008-10-02 25 views
9

Necesito crear informes en una aplicación de Windows C# .NET. Tengo una base de datos SQL Server 2005, Visual Studio 2005 y estoy bastante bien con la creación de procedimientos almacenados y conjuntos de datos.Uso de Crystal Reports en Visual Studio 2005 (aplicación C# .NET de Windows)

¿Puede alguien señalarme en la dirección correcta para crear informes? Simplemente no puedo resolverlo. Algunos ejemplos serían un buen comienzo, o un tutorial práctico simple ... cualquier cosa que se explique un poco mejor que los documentos de MSDN.

Estoy usando el control CrystalDecisions.Windows.Forms.CrystalReportViewer para mostrar los informes, supongo que esto es correcto.

Si estoy a punto de emprender un viaje largo y complejo, ¿cuál es la forma más sencilla de crear y visualizar informes que también se pueden imprimir?

Respuesta

4

He logrado hacer que esto funcione ahora.

breve descripción

Funciona por tener una 'clase de datos', que es sólo una clase regular de C# que contiene variables y ningún código. Esto luego se crea una instancia y se llena con datos y luego se coloca dentro de ArrayList. ArrayList está vinculado al visor del informe, junto con el nombre del informe que se cargará. En el diseñador de informes se usan los "Objetos de .Net", en lugar de comunicarse con la base de datos.

Explicación

creé una clase para contener los datos de mi informe. Esta clase se rellena manualmente por mí al recuperar datos manualmente de la base de datos.La forma de hacerlo no importa, pero aquí hay un ejemplo:

DataSet ds = GeneratePickingNoteDataSet(id); 
foreach (DataRow row in ds.Tables[0].Rows) { 
    CPickingNoteData pickingNoteData = new CPickingNoteData(); 

    pickingNoteData.delivery_date = (DateTime)row["delivery_date"]; 
    pickingNoteData.cust_po = (int)row["CustomerPONumber"]; 
    pickingNoteData.address = row["CustomerAddress"].ToString(); 
    // ... and so on ... 

    rptData.Add(pickingNoteData); 
} 

La clase se pone entonces en el interior de un ArrayList. Cada elemento en el arraylist corresponde a una 'fila' en el informe final.

El primer elemento de la lista también puede contener los datos del encabezado del informe, y el último elemento de la lista puede contener los datos del pie de página del informe. Y porque este es un ArrayList, el acceso normal de matriz se puede utilizar para llegar a ellos:

((CPickingNoteData)rptData[0]).header_date = DateTime.Now; 
((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber(); 

Una vez que tenga un ArrayList completo de datos, se unen a su visor de informes como este, donde 'rptData' es de tipo 'ArrayList'

ReportDocument reportDoc = new ReportDocument(); 
reportDoc.Load(reportPath); 
reportDoc.SetDataSource(rptData); 
crystalReportViewer.ReportSource = reportDoc; 

Ahora deberá vincular su clase de datos al informe en sí. Esto se hace en el interior del diseñador:

  1. Abrir la pestaña Explorador de campos (que podría ser en el menú 'Ver'), y haga clic en "Base de datos Los campos"
  2. Haga clic en 'Datos del Proyecto'
  3. Haga clic en' .NET Objects
  4. Desplazarse por la lista para encontrar su clase de datos (si no está ahí, compilar la aplicación)
  5. Prensa '>>' y luego OK
  6. ahora puede arrastre a los miembros de la clase en el informe y organizarlos como que desee.
+0

Encontré una manera aún mejor, más simple ... http://arcanecode.com/2009/02/09/using-a-local-reporting-services-2008-report-with-an-adonet-data- set/# comment-27511 – Piku

3

El cristal es una opción posible para crear informes. Ha sido por mucho tiempo y parece que a muchas personas les gusta.

Es posible que desee echar un vistazo a los servicios de informes SQL. He usado ambos, pero mi preferencia son los servicios de informes SQL. Está bastante bien integrado en el estudio y funciona de manera similar a los otros proyectos de Microsoft. También es gratuita con el SQL Express etc.

Este es un buen artículo sobre los servicios de informes principio: http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/

+1

¿Y qué tiene esto que ver con los informes de Crystal además de que usted no lo prefiere? – rball

1

que la segunda recomendación de Alex a la vista de SQL Reporting Services - si usted tiene una licencia de desarrollador sql, entonces servicios de información, probablemente ya han

no me gusta informes de cristal, el exceso de tedio en el diseñador (expresiones de edición todo el tiempo) demasiados problemas al despliegue del servidor (comprobar los archivos de licencia!)

1

utilizo Crystal . Esbozaré mi método brevemente, pero tenga en cuenta que soy una tienda de un solo hombre y puede que no se traduzca a su entorno.

Primero, cree un formulario con un visor de CR. Luego:

1) Averigüe qué datos necesita y cree una vista que recupere las columnas deseadas. 2) Cree un nuevo informe de Crystal utilizando el asistente dando su vista como el origen de los datos. 3) Arrastre, suelte, inserte, elimine y lo que sea para darle forma a su informe. Sí, es tedioso. 4) Cree el botón de clic necesario o lo que sea, y cree la función en la que se generará el informe. 5) Recuperar los datos en una DataTable (probablemente en un DataSet). No tiene que usar la vista. 6) Cree el objeto de informe. Configure DataTable para que sea el DataSource. Asigne el objeto de informe al visor de CR. Esta es una parte para la cual hay ejemplos.

Comentarios:

Si pierde la ventana con los campos de la base, etc (Explorador de campos), vaya a la vista Esquema/Documento. (Es mi fantasía tener a Bill Gates en un escenario y pedirle que lo encuentre.)

El motivo para configurar la vista es que si desea agregar una columna, revise la vista y Field Explorer actualizar automáticamente He tenido todo tipo de problemas para hacerlo de otras maneras. Este método también es una solución para un error que requiere escanear a través de todas las tablas restableciendo a qué tabla apuntan. Quieres darle a Crystal una sola mesa. No desea intentar que Crystal se una a las tablas, etc. No digo que no funcione; Yo digo que es más difícil.

Existe (o había) documentación para la implementación VS de Crystal en el sitio web de Business Objects, pero creo que ha desaparecido detrás de una pantalla de registro/inicio de sesión. (Podría soportar más información sobre eso yo mismo.)

He tenido problemas para obtener el salto de página de Crystal cuando quiero, y no el salto de página cuando no quiero, etc. Está lejos del mejor escritor de informes que yo Alguna vez lo he usado y no entiendo por qué parece haber puesto tantos otros fuera del negocio. Además, sus políticas de licencias son muy difíciles de tratar en una organización pequeña y fluida.

Editado para añadir ejemplo:

AcctStatement oRpt = new AcctStatement() ; 
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]); 
oRpt.SetParameterValue("plan_title",sPlanName) ; 
crViewer.ReportSource = oRpt ; 
2

Puede utilizar el visor de informes con los informes del lado del cliente integrado en vs.net (control/ReportViewer ReportBuilder). Puede crear informes de la misma forma que lo hace para los servicios de informes sql, excepto que no necesita el servidor SQL (ni asp.net). Además, usted tiene control total sobre ellos (cómo presenta, cómo recopila datos, en qué capa se generan, qué hace con ellos después de generarlos, como enviarlos por correo, enviarlos a ftp, etc.). También puede exportar como PDF y sobresalir.

Y en su caso la creación de un informe a partir de los datos y la entrada del usuario, esto puede funcionar muy bien ya que puede construir su propia fuente de datos y datos a medida que avanza. Una vez que sus datos estén listos para ser informados, agréguelo a su informe.

Los informes pueden compilarse fácilmente en Visual Studio 2005 (Agregar un informe a su proyecto) y mostrarse en una aplicación de Winforms utilizando el control ReportViewer.

Aquí hay un gran libro que recomiendo a todos que lo miren si les interesan los informes del lado del cliente. Proporciona mucha información excelente y muchos escenarios diferentes y formas de utilizar los informes del lado del cliente.

http://www.apress.com/book/view/9781590598542

0

os recomiendo tratando una solución alternativa de informes - Tengo mucha experiencia con Crystal, y han logrado hacer algunas cosas enrrollados con él en .Net, pero con toda sinceridad la integración de Crystal y .Net es un cerdo absoluto para todo menos los casos más simples.

0

He tratado RS. Estoy convirtiendo de RS a Crystal. RS es demasiado pesado y lento (o algo así). No hay ninguna razón para tener que esperar 30 segundos para que un informe sea RS cuando Crystal lo hace en menos de un segundo.

Cuestiones relacionadas