Pergunta

Eu preciso para criar relatórios em um aplicativo C # .NET do Windows. Eu tenho um banco de dados SQL Server 2005, Visual Studio 2005 e estou bastante OK com a criação de procedimentos e conjuntos de dados armazenados.

Alguém por favor pode me apontar na direção certa para a criação de relatórios? Eu simplesmente não consigo trabalhar com isso. Alguns exemplos seriam um bom começo, ou um simples tutorial de como fazer ... realmente qualquer coisa que é um pouco melhor explicou que a documentação do MSDN.

Eu estou usando o controle CrystalDecisions.Windows.Forms.CrystalReportViewer para exibir os relatórios, presumo isso é correto.

Se eu estou prestes a embarcar em uma longa e complexa jornada, qual é a maneira mais simples de criar e exibir relatórios que também podem ser impressos?

Foi útil?

Solução

Eu consegui fazer este trabalho agora.

Breve Resumo

Ele funciona por ter uma 'classe de dados', que é apenas uma classe regular C # contendo variáveis ??e nenhum código. Esta é então instanciado e preenchido com dados e, em seguida, colocadas dentro de um ArrayList. O ArrayList é vinculado ao visualizador de relatórios, junto com o nome do relatório de carga. No designer relatório objetos .NET são usados, em vez de se comunicar com o banco de dados.

Explicação

Eu criei uma classe para armazenar os dados para o meu relatório. Esta classe é preenchido manualmente por mim, recuperando manualmente os dados do banco de dados. Como fazer isso não importa, mas aqui está um exemplo:

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);
}

A classe é então colocado dentro de um ArrayList. Cada elemento nos corresponde ArrayList para uma 'linha' no relatório final.

O primeiro elemento da lista também pode manter os dados do cabeçalho relatório, eo último elemento da lista pode conter os dados do relatório de rodapé. E porque este é um ArrayList, acesso normal Array pode ser usado para chegar a eles:

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

Uma vez que você tem um ArrayList completo de dados, vinculá-lo ao seu visualizador de relatórios como este, onde 'rptData' é do tipo 'ArrayList'

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

Agora você vai precisar para se ligar sua classe de dados para o relatório em si. Você faz isso dentro do designer:

  1. Abra a guia Campo Explorer (que pode ser no menu 'View'), e clique com o botão direito "Banco de dados Fields"
  2. Clique em 'Projeto de dados'
  3. Clique em' objetos .NET
  4. Percorra a lista para encontrar o seu classe de dados (se ele não estiver lá, compilar o aplicativo)
  5. Pressione '>>' e então OK
  6. Você pode agora arrastar os membros da classe sobre o relatório e organizá-los como você quer.

Outras dicas

Crystal é uma opção possível para a criação de relatórios. Tem sido em torno de um longo período de tempo e um monte de pessoas parecem gostar.

Você pode querer dar uma olhada em serviços de relatório do SQL. Eu tenho usado tanto, mas minha preferance é serviços de relatórios SQL. Sua muito bem integrado no estúdio e funciona de forma semelhante aos outros projectos da Microsoft. É também livre com o SQL Express etc.

Este é um bom artigo sobre começando Serviços de comunicação: http : //www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/

Você pode usar o visualizador de relatórios com relatórios do lado do cliente embutido no vs.net (controle ReportBuilder / ReportViewer). Você pode criar relatórios da mesma forma como você faz para serviços de relatórios SQL, exceto que você não sql server necessidade (nem asp.net). Além disso, você tem total controle sobre eles (como você apresenta, como você coletar dados, o que camada eles são gerados dentro, o que você faz com eles após geração, como enviá-los, enviando para ftp, etc). Você também pode exportar como PDF e Excel.

E no seu caso construir um relatório a partir de dados e entrada do usuário, este pode funcionar muito bem, como você pode construir a sua própria fonte de dados e os dados que você vá junto. Uma vez que seus dados estão prontos para serem relatadas, vinculá-lo ao seu relatório.

Os relatórios podem ser facilmente construída em Visual Studio 2005 (Adicione um relatório ao seu projeto), e será mostrado em um aplicativo WinForms usando o controle ReportViewer.

Aqui está um grande livro que eu recomendo a todos para olhar se interessado em relatórios do lado do cliente. Ele dá um grande lote de informações e muitos cenários diferentes e formas de comunicação lado uso do cliente.

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

Eu segunda recomendação de Alex para olhar para serviços de relatórios SQL - Se você tem uma licença de desenvolvedor sql, então você provavelmente já tem serviços de relatórios

Eu não gosto de relatórios de cristal, muito tédio no designer (edição de expressões o tempo todo) muitas questões-servidor implantação (verificar os arquivos de licença!)

Eu uso Cristal. Vou descrever o meu método brevemente, mas esteja ciente de que eu sou uma loja de um homem e não pode traduzir para o seu ambiente.

Primeiro, crie um formulário com um Visualizador de CR. Então:

1) Descobrir quais os dados que você precisa, e criar uma visão que recupera as colunas desejadas. 2) Criar um novo relatório de cristal usando o assistente dar seu ponto de vista como a fonte dos dados. 3) arrastar, soltar, insert, delete, e qualquer que seja a áspero seu relatório em forma. Sim, é tedioso. 4) Criar o botão de clique necessário ou o que quer, e criar a função em que para gerar o relatório. 5) recuperar os dados para um DataTable (provavelmente num conjunto de dados). Você não tem que usar a vista. 6) Criar o objeto de relatório. Defina a DataTable a ser a fonte de dados. Atribuir o objeto de relatório ao CR Viewer. Esta é uma parte para a qual existem exemplos.

Comentários:

Se você perder a janela com os campos de banco de dados, etc (Campo Explorer), vá a Ver / Document Outline. (É a minha fantasia de ter Bill Gates em um palco e pedir-lhe para encontrá-lo.)

A razão para configurar o ponto de vista é que se você quiser adicionar uma coluna, você rever a vista, eo Explorador campo irá atualizar automaticamente. Eu tive todos os tipos de problemas para fazer isso outras maneiras. Este método também é uma forma de contornar um bug que requer a digitalização através de todas as tabelas redefinir a tabela que apontam para. Você quer entregar cristal uma única tabela. Você não quer para tentar obter de cristal para se juntar tabelas, etc. Eu não digo que ele não funciona; Eu digo que é mais difícil.

Não é (ou era) a documentação para a implementação VS de cristal na Business Objects web site, mas eu acredito que ele desapareceu atrás de uma tela registo / login. (Eu poderia ficar mais informações sobre isso eu mesmo.)

Eu tive problemas para obter Cristal para quebra de página quando quero, e não quebra de página quando eu não quero, etc. Está longe de ser o melhor escritor de relatório que já usei e eu não entendo por que parece ter colocado tantos outros fora do negócio. Além disso, as suas políticas de licenciamento são muito difíceis de tratar em uma organização pequena, fluido.

editado para adicionar exemplo:

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

Eu encontrei os seguintes sites resolvido meus problemas. Incluído aqui para referência futura.

CrystalReportViewer objeto Tutoriais modelo para o tutorial sobre como fazer a coisa toda funcionar. E também Configurando um projeto para usar o Crystal Reports e especificamente preparar a forma e adicionar o controle

Eu recomendo fortemente tentar uma solução de relatórios alternativa - Eu tenho muita experiência com o Crystal, e conseguiram fazer algumas coisas funky com ele na Net, mas, muito sinceramente a integração de cristal e .Net é um porco absoluta para nada, mas os casos mais simples.

Eu tentei RS. Estou conversão de RS de volta para Cristal. RS é muito pesado e lento (ou algo assim). Não há nenhuma razão para ter que esperar 30 segundos para um relatório para tornar está RS quando Cristal faz isso em menos de um segundo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top