Como você provavelmente sabe, os relatórios no FastReport.Net podem ser criados não apenas em um designer especial, mas também à partir do código do aplicativo escrito pelo usuário. Ao mesmo tempo, em vez do arquivo usual com extensão frx, você receberá uma classe de relatório. Ele pode ser convertido em uma biblioteca e usado em diferentes projetos. Qual é essa forma de se criar relatório?
Observe esse código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
//Cria uma instância da classe Report Report report = new Report(); //carrega dados DataSet ds = new DataSet(); ds.ReadXml(AppFolder + "\\nwind.xml"); //Registra o data source report.RegisterData(ds); //Habilita a tabela de dados report.GetDataSource("Products").Enabled = true; //Adiciona página ao relatório ReportPage page = new ReportPage(); report.Pages.Add(page); page.CreateUniqueName(); //Cria banda GroupHeader GroupHeaderBand group = new GroupHeaderBand(); page.Bands.Add(group); group.CreateUniqueName(); group.Height = Units.Centimeters * 1; group.Condition = "[Products.ProductName].Substring(0,1)"; group.SortOrder = FastReport.SortOrder.Ascending; // cria grupo de texto TextObject groupTxt = new TextObject(); groupTxt.Parent = group; groupTxt.CreateUniqueName(); groupTxt.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 1); groupTxt.Text = "[[Products.ProductName].Substring(0,1)]"; groupTxt.Font = new Font("Arial", 14, FontStyle.Bold); groupTxt.VertAlign = VertAlign.Center; groupTxt.Fill = new LinearGradientFill(Color.LightGoldenrodYellow, Color.Gold, 90, 0.5f, 1); // cria banda de dados DataBand data = new DataBand(); group.Data = data; data.CreateUniqueName(); data.DataSource = report.GetDataSource("Products"); data.Height = Units.Centimeters * 0.5f; // cria texto “product name” TextObject productText = new TextObject(); productText.Parent = data; productText.CreateUniqueName(); productText.Bounds = new RectangleF(0, 0, Units.Centimeters * 10, Units.Centimeters * 0.5f); productText.Text = "[Products.ProductName]"; // cria grupo para rodapé group.GroupFooter = new GroupFooterBand(); group.GroupFooter.CreateUniqueName(); group.GroupFooter.Height = Units.Centimeters * 1; if (PDFCheckBox.Checked) { report.Prepare(); FastReport.Export.Pdf.PDFExport export = new FastReport.Export.Pdf.PDFExport(); export.Export(report); } else report.Show(); |
Este é um exemplo de criação de um modelo de relatório com grupos. Como você pode ver, estamos criando objetos de relatório de forma consistente, começando com os objetos de texto da página do relatório. Colocamos os objetos criados e configuramos as propriedades de sua exibição. Isso requer um bom desempenho da estrutura do modelo de relatório FastReport.Net. Além disso, para conseguir a exibição desejada dos elementos, você terá bastante tempo para executar o relatório avaliar visualmente e corrigir as propriedades dos objetos, exibindo a largura ou coordenadas desejadas. Portanto, essa abordagem deve ser o de relatar listas, matrizes, tabelas - onde não há necessidade de ajustar a localização dos elementos em relação uns aos outros.
A principal vantagem de um relatório gerado no código é a capacidade de editar relatórios durante a execução, adicionando código dependendo das condições ou eventos. Isso permite criar relatórios com lógica complexa que depende diretamente do próprio aplicativo do cliente.
Não é segredo que os modelos de relatório do FastReport.Net são formatados em xml, apesar da extensão frx. Esses modelos são fáceis de transferir e visualizar em outros computadores através do programa Viewer. Mobilidade e independência da aplicação cliente - são vantagens inegáveis do padrão tradicional em formato de relatório frx, ou uma versão com dados preenchidos em formato fpx. Portanto, tendo em seu aplicativo relatórios gerados a partir do código, muitos gostariam de poder convertê-los para o formato normal do tipo xml frx. É incrivelmente simples de fazer:
1 2 |
Report report = new Report(); report.Save("C:\\report.frx"); |
Ou seja, basta utilizar a função “Salvar” do objeto de relatório. Conforme os parâmetros são passados o caminho e o nome do arquivo no qual se deseja salvar o relatório. Assim, podemos usar uma única conta que é criada a partir do código e, se necessário, convertê-la em um formato tradicional frx. O arquivo resultante pode ser transferido para outros desenvolvedores ou usuários.
Tanto os relatórios baseados em código quanto os relatórios frx têm suas vantagens. A primeira vence quando o relatório precisa ser alterado diretamente "on the go", a segunda é quando um relatório móvel é necessário ou o modelo tem muitos elementos com uma localização claramente definida em relação ao outro. Você precisa escolher uma forma de criar um relatório com base nesses benefícios.