XML - Gerando relatórios a partir de arquivos XML - I
Geralmente quando precisamos gerar um relatório a fonte de dados quase sempre é um banco de dados relacional como SQL Server, Oracle, MySQL, Microsoft Access, FireBird, etc. Mas com a difusão da utilização de arquivos XML, podemos ter um cenário onde os dados estão localizados em arquivos XML. Neste caso temos que gerar relatórios a partir destes arquivos. E então como fazer ???
Este artigo vai mostrar como gerar relatórios a partir de arquivos XML usando o Crystal Reports (I) e também o ReportViewer(II).
Eu não vou entrar muito nos detalhes de como gerar o arquivo XML mas para este exemplo vamos supor que você tenha que gerar um relatório da tabela Products do banco de dados Northwind.mdf do SQL Server 2005.
Os exemplos deste artigo usam o Visual Studio 2008 e o SQL Server 2005 Express Edition (banco de dados Northwind.mdf) e a versão do Crystal Reports para Visual Studio 2008;
1- Gerando o arquivo XML
Abra o VS 2008 e crie um novo projeto do tipo Windows Forms chamado Gerando_Relatorios_XML;
No formulário form1.vb vamos incluir dois controles Button conforme o leiaute abaixo:
1- btnGerarXML 2- btnGerarRelatorio |
Vamos gerar o arquivo produtos.xml a partir da tabela Products do banco de dados Northwind.mdf.
Primeiro declare os namespaces:
Imports
System.DataNo evento Click do botão de comando - Gerar XML... insira o código :
Private Sub btnGerarXML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGerarXML.Click Dim conn As New SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=SSPI;") Dim sqlTexto As String = "SELECT * FROM Products" Dim cmd As New SqlCommand(sqlTexto, conn) Try Dim adapter As SqlDataAdapter = New SqlDataAdapter(cmd) Dim ds As New DataSet adapter.Fill(ds) ds.WriteXml("c:\dados\produtos.xml") MsgBox("Arquivo produtos.xml gerado com sucesso em c:\dados") Catch ex As Exception MsgBox(ex.Message) Finally conn.Close() conn.Dispose() End Try End Sub |
O código acima é tudo que precisamos para gerar o arquivo XML a partir da tabela Products. Veja a simplicidade onde estou usando o método WriteXml() do DataSet gerado a partir da tabela Products.
O arquivo produtos.xml gerado na pasta c:\dados tem o seguinte conteúdo:
Gerando o Relatório no Crystal Reports
Agora vamos realmente ao que interessa: gerar o relatório a partir do arquivo produtos.xml obtido.
Clique com o botão direito do mouse sobre o nome do projeto e selecione Add New Item;
Selecione o template Crystal Reports e informe o nome RelatorioXML.rpt e clique em Add;
O assistente do Crystal vai aparecer, selecione a opção Using the Report Wizard e escolha o Expert Standard e clique em OK;
Selecione o item DataBase File e clique em Next>;
A seguir selecione o arquivo Produtos.xml que foi gerado e clique em Abrir;
Seria criado um DataSet chamado Table, marque-o e clique na seta > para selecioná-lo conforme figura abaixo e clique em Next>;
Agora selecione os campos que deseja exibir no relatório. Eu escolhi os campos ProdutctID, ProductName, UnitPrice e UnitsInStock selecione-os conforme a figura abaixo e clique em Next>;
Como não vamos realizar nenhum agrupamento nem seleção de registroo Clique em Next> na janela atual e na próxima janela também clique em Next>;
Para encerrar a criação do relatório clique em Finish;
Ao final você verá a estrutura do relatório exibida no descritor conforme a figura abaixo;
Para exibir o relatório vamos incluir a partir da ToolBox o componente CrystaReportViewer no formulário form1.vb abaixo dos dois botões de comando que incluímos anteriormente no formulário;
Abrindo a guia CrystalReportViewer Tasks selecione Choose a Crystal Reports;
E escolha o relatório que foi criado anteriormente e clique em OK;
Agora vamos definir o código que irá exibir o relatório no componente.
Defina os seguintes namespaces no início do formulário form1.vb;
Imports
CrystalDecisions.SharedNo evento Click do botão Exibir Relatório de Produtos inclua o seguinte código;
Private
Sub
Button1_Click(ByVal
sender As
System.Object,
ByVal
e As
System.EventArgs)
Handles
Button1.Click
Dim relatorio
As
New
ReportDocument() End Sub |
No código criamos uma instância da classe ReportDocument, esta classe é a classe base para todos os relatórios, onde cada relatório é uma classe que herda da classe ReportDocument.
Para visualizar o relatório usamos o controle CrystalReportViewer onde a sua propriedade ReportSource define a fonte do relatório a exibir.
Executando o projeto e clicando neste botão iremos obter o relatório conforme a figura abaixo;
Simples, simples assim...
Pegue o projeto completo aqui: Gerando_Relatorios_XML.zip
Eu sei é apenas Crystal Reports, mas eu gosto...
Referências: