Passar DataTable dinâmico para o DataSet do Crystal Report (.NET)

3 respostas
R

Pessoal,

Fiz um relatório no Crystal, o problema que não vejo uma solução para um DataTable dinâmico, minha aplicação gera um DataTable em tempo de execução, devo mandar esse DataTable para o DataSet do Crystal para impressão em tela em PDF.

Alguém sabe uma solução, tutorial ou etc para uma caso desse onde é gerado o DataTable dinâmicamente, com colunas e linhas geradas dinâmicamente, passar isso para o DataSet do Crystal para impressão de PDF em tela?

Abs
Rodrigo Santik

3 Respostas

N

Oi, rsantik!

Bom, cara, esse é o jeito que eu faço, normalmente:

1. Como gerar um DataTable em tempo de execução? Você vai gerar de um banco de dados? Você pode criar sua consulta e, usando um objeto DataAdapter, criar seu DataTable.
public DataTable RecuperarTabelaDeAlunos()
{
    DataTable datatableAlunos = new DataTable();
    string sentencaAlunos = "SELECT ID, NOME, TURMA FROM ALUNOS";
    OracleConnection connectionAlunos = new OracleConnection(/* String de conexão */);
    OracleDataAdapter dataadapterAlunos = new OracleDataAdapter(sentencaAlunos, connectionAlunos);
                                                                                                                                                      
    dataadapterAlunos.Fill(datatableAlunos);
    datatableAlunos.TableName = "TABELAALUNOS";

    return datatableAlunos;                                                                                                                                                                                             
}
Agora, como você quer passar isso para um relatório:
ReportDocument entidadeReport = new ReportDocument();

// caso o seu relatório esteja em uma pasta específica...
entidadeReport.Load(@Request.PhysicalApplicationPath + @"\Alunos\Relatorios\RelatorioAlunos.rpt");

DataTable datatableAlunos = RecuperarTabelaDeAlunos();
entidadeReport.SetDataSource(datatableAlunos);
entidadeReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "");
R

Então Nicolas, até aí blz, já estou gerando um DataTable e passando para Crystal…

O problema é que o DataTable pode ter um numero de colunas variado, isto é, dependendo do que vem do banco, o DataTable pode ter 3 colunas, 4 colunas, 10 colunas e etc…

Quando vou passar esse DataTable para o Crystal… como vou saber, lá no Crystal, quantas colunas o DataTable tem?

Eu configurei tudo certinho no DataSet, montei o DataTable do rpt, mas o problema é que esse DataTable deve ser de acordo, em número de colunas, com o DataTable que a aplicação envia para o rpt.

Resumindo, o problema é que o número de colunas é variável, como o relatório vai saber quantas colunas o DataTable tem?

N

Que tal fazer assim:

  1. No seu relatório, crie uma conexão com o seu banco de dados no Database Expert;
  2. Lá, você adiciona a conexão com o seu banco e seleciona a tabela a qual você quer procurar ou a view na qual quer pesquisar.

Assim, você passa uma consulta do tipo “SELECT * FROM TABELA”, e ele reconhecerá.
A medida em que os campos forem mudando, você seu relatório vai reconhecendo, já que tem uma conexão direta com a tabela ou a view.
Que tal?

Criado 24 de janeiro de 2012
Ultima resposta 24 de jan. de 2012
Respostas 3
Participantes 2