André Alves de Lima

Talking about Software Development and more…

Escondendo a tab Main Report no Crystal Reports

Já faz algum tempo que as versões do controle de visualização de relatórios do Crystal Reports para o .NET Framework vêm com uma tab chamada “Main Report“. Essa tab serve para controlar o nível de drill down do relatório. Ou seja, quando temos um sub-relatório, o usuário pode fazer um drill-down no sub-relatório (entrar no sub-relatório), e então essa tab serve justamente para que o usuário consiga voltar ao relatório principal.

Porém, por um motivo ou outro, pode ser que nós queiramos desabilitar a opção de drill-down no nosso relatório. E como é que nós escondemos essa tab Main Report no Crystal Reports? Essa tarefa, que não é tão trivial, é o tema do artigo de hoje.

O que é a tab “Main Report”?

Como já mencionei anteriormente na introdução, a tab “Main Report” serve para controlar o drill-down nos nossos relatórios com o Crystal Reports. Ela é aquela tab estranha que fica logo abaixo da toolbar principal do controle visualizador do Crystal Reports:

Em relatórios que não têm sub-relatórios, não faz o menor sentido exibirmos essa barra. Ela pode, inclusive, acabar confundindo o usuário, que pode pensar que ela serve para outra coisa. Além disso, pode ser que nós desejemos desabilitar completamente o drill-down, mesmo que o relatório tenha sub-relatórios.

Para desabilitar o drill-down, podemos simplesmente configurar a propriedade “EnableDrillDown” como “False“:

Porém, isso não é o suficiente para que a tab “Main Report” desapareça. No caso do controle para Windows Forms, temos que fazer uma pequena “maracutaia“.

Escondendo a tab “Main Report”

Surpreendentemente, no controle do Crystal Reports do Windows Forms, não existe uma propriedade para desabilitarmos a tab “Main Report“. Dessa forma, a única maneira de escondê-la é percorrermos os controles internos do Crystal Reports até encontrarmos a maldita barra para que possamos ocultá-la.

Para isso, vamos criar um método que receberá um CrystalReportViewer e que será justamente responsável por fazer essa “gambiarra“. Dentro desse método, percorreremos todos os controles filhos do CrystalReportViewer até encontrarmos um PageView (que é onde a tab está localizada). Dentro do PageView, pegaremos o primeiro controle, que deverá ser um TabControl. Esse é justamente o TabControl que controla o esquema de drill-down.

Porém, não sei se você sabe, mas, o TabControl do Windows Forms não permite que escondamos o seu cabeçalho. Ou seja, a única opção para escondermos o cabeçalho do TabControl é configurarmos o seu tamanho para algo muito pequeno.

Veja só como fica o código no final das contas:

        private void HideCrystalReportViewerMainTab(CrystalDecisions.Windows.Forms.CrystalReportViewer viewer)
        {
            foreach (var control in viewer.Controls)
            {
                var pageView = control as CrystalDecisions.Windows.Forms.PageView;

                if (pageView != null && pageView.Controls.Count > 0)
                {
                    var tab = pageView.Controls[0] as TabControl;

                    if (tab != null)
                    {
                        tab.ItemSize = new Size(0, 1);
                        tab.SizeMode = TabSizeMode.Fixed;
                    }
                }
            }
        }

Feito isso, basta irmos no construtor do formulário onde o controle do Crystal Reports está posicionado e chamarmos o nosso método passando o controle:

        public FormOndeEstaOControleDoCrystalReports()
        {
            InitializeComponent();

            HideCrystalReportViewerMainTab(crystalReportViewer);
        }

E o resultado é que a tab “Main Reports” sumirá de uma vez por todas:

Obviamente, como este código pode ser reutilizado em todos os formulários, sugiro que você o coloque como método estático em alguma classe de métodos utilitários do seu projeto.

Sei que esse código não é o melhor do mundo e que ele provavelmente quebrará caso a SAP decida alterar a estrutura interna do controle, mas, infelizmente é a única forma de escondermos essa tab na versão atual, já que a própria SAP não disponibilizou uma maneira de fazermos isso nativamente.

E no controle web?

Por outro lado, no controle web, a SAP disponibilizou uma propriedade que podemos utilizar para esconder a tab “Main Report“. Ela é a propriedade chamada “HasDrilldownTabs“:

Confira o antes:

E o depois:

Disclaimer

A solução que eu utilizei neste artigo para esconder a tab “Main Report” do Crystal Reports foi baseada nesta discussão nos fóruns da MSDN americana (eu me baseei nesta discussão, mas, repare que a minha solução final está um pouco diferente do sugerido nesta discussão):

Hide [Main Report]

Concluindo

Muitas vezes o excesso de opções acaba confundindo o usuário da nossa aplicação. Esse pode ser o caso da tab “Main Report” do controle do Crystal Reports, principalmente se você não utiliza sub-relatórios ou drilldown nos seus relatórios. Como não é possível escondermos essa tab de forma nativa, neste artigo eu mostrei para você uma forma de escondê-lo, caso você sinta que isso é necessário.

Apesar de ser uma pequena “gambiarra“, infelizmente é a única maneira que temos para realizar essa tarefa. No controle web do Crystal Reports, a SAP disponibilizou uma propriedade para escondermos essa tab, mas, no controle desktop parece que ela se esqueceu.

Me conte depois nos comentários se você já tinha reparado nessa tab e se os usuários da sua aplicação já ficaram confusos com ela.

Antes de me despedir, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado, ficará sabendo em primeira mão sobre o artigo da próxima semana e receberá também dicas “bônus” que eu só compartilho por e-mail. Além disso, você já deve ter percebido que eu recebo muitas sugestões de temas e eu costumo dar prioridade às sugestões vindas de inscritos da minha newsletter. Inscreva-se utilizando o formulário logo abaixo.

Até a próxima!

André Lima

Newsletter do André Lima

* indicates required



Powered by MailChimp

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *