Label servir de filtro no grid

É possível fazer com que ao clicar em uma label, esta seja como se fosse um filtro no grid, depois da consulta já efetuada?

Como por exemplo, na imagem abaixo, se eu clicar no label da legenda ‘Apenas importação’, mostrar no grd apenas as linhas destacadas, pois existe registro de apenas importação neles.

Att,
Nielson Santos

1 curtida

Olá @nielson.santos.

Com a “label” não é possível porque ela não tem nenhum evento. Mas se você substituir ela por um “Button”, você pode usar o evento Click para trocar o valor dos parâmetros da Consulta e atualiza-la em seguida.

Por exemplo, você pode criar um parâmetro “situacao” na Consulta com as seguintes opções:

  • 0 - Todos
  • 1 - Caixa Fechado
  • 2 - Recebimento Desp/Rec Confirmados
  • 3 - Apenas Importação
  • 4 - Não possui Movimento
  • 5 - Importação, Lançamento de prestação de contas e despesa/receita pendentes de conferencia

Aí você cria uma variável no Formulário para vincular com o parâmetro da Consulta. Digamos que a variável se chame “situacaoGrid”.

No evento clique do botão (que substituirá a label), você popula a variável “situacaoGrid” com o valor fixo 3, e em seguida chama a instrução “Atualizar Fonte de Dados”, e marca a Consulta para ser atualizada.

Dessa forma você vai ter o comportamento que deseja.

Se você quiser ter múltiplas opções de filtro, pode usar campos do tipo “CheckBox” ao invés de “Button”, , usar o evento “CheckedChange” ao invés do “Click” e criar um parâmetro para cada situação diferente na Consulta, com valor 0 (falso) e 1 (verdadeiro). Aí seria necessário apenas fazer o vinculo dos campos do tipo “CheckBox” com os parâmetros da Consulta e chamar a instrução “Atualizar Fonte de Dados” no evento “CheckedChange”.

A única restrição no uso das CheckBoxes seria que você não conseguiria trocar a cor do texto.

Não conseguir atualizar o grid, preciso passar esse parâmetro que criei como parâmetro no where da minha consulta para atualizar?

Criei o parâmetro na consulta como pSituacao, e defini como combobox com aqueles itens:

Em seguida, no formulário criei a variável vSituacaoGrid como number:
image

E no componente de consulta do formulário, atribuí a variável ao parâmetro:

No click do botão, passei fixo 3 na variável e para atualizar a fonte de dados consulta:

image.

é isso mesmo? ou tem mais algum procedimento que esquecí?

É isso mesmo @nielson.santos

Acho que só está faltando utilizar o novo parâmetro na clausula Where da Consulta.

Entendi, o meu problema é que essa tabela que estou usando na consulta, tem um campo de status para cada dia do mês e além disso, foi criada como texto no campo do status.

:pensive:

Você pode fazer mais ou menos dessa maneira:

SELECT 
-- Campos
FROM TABELA
WHERE 
   CASE '{?PARAM pSituacao}'
      WHEN '1' THEN '????' -- Texto da Situação gravada no banco, correspondente ao código 1
      WHEN '2' THEN '????' -- Texto da Situação gravada no banco, correspondente ao código 2
      WHEN '3' THEN '????' -- Texto da Situação gravada no banco, correspondente ao código 3
      WHEN '4' THEN '????' -- Texto da Situação gravada no banco, correspondente ao código 4
      WHEN '5' THEN '????' -- Texto da Situação gravada no banco, correspondente ao código 5
      ELSE ''
   END IN (STATUS_DIA_1, STATUS_DIA_2, STATUS_DIA_3 /*, STATUS_DIA_4, ...*/)

Olá @daniel.giacomelli, tudo bem?

Consegui fazer aqui, não fiz exatamente igual vc passou mas deu pra aproveitar bem a ideia.

Como a estrutura da minha tabela foi criada de uma forma complicada de se utilizar, deu bastante trabalho, tive que fazer vários case when no where para atender minha necessidade e além disso, tive que criar outra consulta para o ‘Todos’ e inibir a consulta do todos quando era clicada na legenda que criei.

Ficou bem bacana, pois os botões da legenda, fiz em CSS então não ficou com aparecia de botão.

Mais uma vez, obrigado pela força.

Att,
Nielson Santos

1 curtida

@nielson.santos, talvez não fosse necessário criar outra Consulta.
Você poderia tentar tratar o filtro “todos” no Where dessa forma:

SELECT
-- campos
FROM tabela
WHERE COALESCE('{?PARAM pSituacao}', '0') = '0' -- 0=Todos
OR (
  --- Outros filtros aqui
);
1 curtida