Escolar Documentos
Profissional Documentos
Cultura Documentos
1 ' VB.NET
2 Public Class Produto
3 Public Property ProdutoId As Integer
4 Public Property Nome As String
5 Public Property Preco As Decimal
6 Public Property EstoqueMinimo As Integer
7 Public Property EstoqueAtual As Integer
8 Public Property Descontinuado As Boolean
9 End Class
A partir daqui, temos duas opções: ou criamos o relatório em branco ou utilizamos o assistente.
Neste artigo eu vou prosseguir com o relatório em branco, mas, se você quiser seguir com o
assistente, não fará diferença alguma.
Uma vez criado o relatório, temos que configurar a fonte de dados do relatório. Para isso, vamos até
a janela de “Field Explorer“, clicamos com o botão direito em “Database Fields” e escolhemos a
opção “Database Expert“:
Em seguida, temos que encontrar a nossa classe “Produto” para jogarmos para o lado “Selected
Tables“. Encontramos essa classe dentro da categoria “.NET Objects“:
Por fim, vamos arrastar os campos da janela “Field Explorer” para dentro da área de detalhes do
relatório e vamos adicionar um título ao relatório, de forma que ele fique parecido com a imagem
abaixo:
Exibindo o relatório
Agora que já temos o nosso relatório em mãos, vamos exibir esse relatório no nosso formulário.
Para isso, temos que arrastar um controle do Crystal Reports para dentro do formulário e, em
seguida, temos que escolher o relatório que acabamos de criar:
Feito isso, vamos adicionar um pouquinho de código no code-behind do formulário para criarmos e
passarmos uma lista de Produtos para o relatório. Faremos isso com um laço “for” e alguns dados
aleatórios. Obviamente, no seu projeto “de verdade“, você teria que recuperar os dados do banco:
' VB.NET
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
1
MyBase.Load
2
Dim Rand As Random = New Random()
3
Dim Lista As List(Of Produto) = New List(Of Produto)
4
For Contador As Integer = 1 To 100
5
Lista.Add(New Produto() With
6
{
7
.ProdutoId = Contador,
8 .Nome = "Produto " & Contador,
9 .Preco = Convert.ToDecimal(Rand.NextDouble() *
10 100),
11 .EstoqueMinimo = Rand.Next(1, 1000),
12 .EstoqueAtual = Rand.Next(1, 1000),
13 .Descontinuado = Convert.ToBoolean(Rand.Next(-1,
14 1))
15 })
16 Next
17 RelatorioProdutos1.SetDataSource(Lista)
18 RelatorioProdutos1.Refresh()
End Sub
Execute o projeto e veja o resultado do relatório sem a formatação condicional:
Nota: se você receber uma “FileNotFoundException” vindo do controle do Crystal Reports ao
executar o projeto, isso quer dizer que falta uma configuração no seu arquivo app.config. Eu
mostrei como fazer essa configuração no artigo: Trabalhando com o Crystal Reports no WPF.
Em seguida, temos que ir até a aba “Font“. Veja só os botões “x2” que eu mencionei anteriormente:
No nosso caso, como queremos adicionar uma lógica referente à cor da célula, temos que clicar no
botão “x2” da propriedade “Color“. Quando clicamos no botão, a janela de edição de fórmula do
Crystal Reports será aberta. Dentro dessa janela, temos que colocar a expressão que deverá retornar
“vermelho” caso o “Estoque atual” seja menor que o “Estoque mínimo” ou preto caso contrário.
As fórmulas do Crystal Reports podem ser escritas de duas maneiras: utilizando a sintaxe do
próprio Crystal Reports (que é tipo um Pascal misturado com Basic e C) ou utilizando a sintaxe
Basic. Eu nunca vi ninguém utilizar a sintaxe Basic em relatórios do Crystal Reports, mas, é
totalmente possível. Essa opção pode ser bem útil caso você esteja acostumado a desenvolver
relatórios no Report Viewer ou caso você trabalhe com VB.NET.
Para implementarmos essa lógica da cor, utilizamos a seguinte fórmula:
1 if ({CrystalFormatacaoCustomizada_Produto.EstoqueAtual} <
2 {CrystalFormatacaoCustomizada_Produto.EstoqueMinimo}) then
3 crRed
else
4 crBlack
Ou, caso você prefira trabalhar com a sintaxe em Basic, a fórmula seria esta:
formula = IIf({CrystalFormatacaoCustomizada_Produto.EstoqueAtual}
1 < {CrystalFormatacaoCustomizada_Produto.EstoqueMinimo}, crRed,
crBlack)
Para escolher a sintaxe da fórmula, utilize esse dropdown:
Dentro do mesmo relatório você pode ter algumas fórmulas com a sintaxe do Crystal Reports e
outras fórmulas com sintaxe Basic.
Note que, dentro da janela “Section Expert“, temos os famosos botões “x2” para as propriedades da
seção:
No nosso caso, vamos adicionar uma fórmula na propriedade “Suppress“. A fórmula deverá retornar
“true” caso o registro deva ser escondido, e “false” caso contrário. Dessa forma, para escondermos
os produtos descontinuados, nós só temos que utilizar o campo “Descontinuado” da nossa tabela de
produtos:
1 {CrystalFormatacaoCustomizada_Produto.Descontinuado}
Execute a aplicação e veja o resultado:
Como você pode notar, nos produtos em que “Estoque atual” é menor que “Estoque mínimo“, a
célula correspondente ao “Estoque atual” está pintada de vermelho. Além disso, note que alguns
produtos foram escondidos (Ids 3, 5, 6, etc). Esses produtos foram escondidos porque estão
descontinuados.
Concluindo
O Crystal Reports é extremamente flexível no que diz respeito à adição de lógicas de negócio para
as propriedades dos seus controles e seções. Nós podemos adicionar fórmulas em praticamente
todas as propriedades de todos os controles. Essas fórmulas podem ser escritas tanto utilizando a
sintaxe do próprio Crystal Reports quanto a sintaxe em Basic.
Neste artigo você conferiu como trabalhar com formatação condicional no Crystal Reports,
adicionando uma fórmula na propriedade “Color” de uma célula, de forma que ela seja pintada de
vermelho em algumas situações. Além disso, você aprendeu também a esconder registros do
relatório baseando-se em uma fórmula.
E você, já utilizou as fórmulas do Crystal Reports? Qual foi a fórmula mais maluca que você já teve
que implementar nos seus relatórios? Você costuma utilizar a sintaxe do Crystal Reports ou a
sintaxe em Basic? Estamos todos curiosos para saber, então, conte-nos mais detalhes na caixa de
comentários!
Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail
toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da
próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se
utilizando o formulário logo abaixo.