É possível utilizar apenas Mês/Ano como entrada de dados em um campo DateTimePicker?

É possível utilizar apenas Mês/Ano como entrada de dados em um campo DateTimePicker?

Como não encontrei uma forma de fazer isso com este tipo de campo, utilizei um campo de texto, com a mascara /__ e apenas para números.
Porém, como é um campo texto o usuário poderá colocar uma infinidade de variações incorretas exemplo: 1/, ou 1/ 8, …

Como eu poderia tratar para que este campo tenha um preenchimento correto de mês e ano?

Olá @nielson.santos!

Seja bem vindo a nossa comunidade!

No Latromi, não existem campos pré-definidos do tipo Mês/Ano ou Ano/Mês.

Mas existem outras abordagem que funcionam bem para este tipo de valor.

Validação por Expressão Regular

Você pode usar um campo do tipo TextBox do Formulário, e preencher as seguintes propriedades:

  • Máscara: ##/####
  • Expressão Regular: ^(|(0[1-9]|1[0-2])(19[0-9]{2}|2[0-9]{3}))$

Máscara

A máscara vai permitir que o usuário informe até 6 números, mas nenhuma letra.

Expressão Regular

A expressão regular, vai validar o valor do campo durante o Click de um botão cuja a propriedade “Requer Validação de Campos” esteja marcada.

Essa expressão considera o valor válido se:

  • O campo estiver vazio (não preenchido).
  • O campo estiver preenchido com valores de 01 até 12 nos dois primeiros dígitos, seguido de 1900 até 2999 nos próximos quatro dígitos. A máscara não é considerada na expressão regular pois não faz parte do valor.

Na tabela abaixo, podemos ver exemplos de como ficariam os valores informados:

Digitado Válido Recebido¹
13/2019 :negative_squared_cross_mark:
1/2018 :negative_squared_cross_mark:
02/87 :negative_squared_cross_mark:
12/1899 :negative_squared_cross_mark:
01/1900 :white_check_mark: 011900
01/2018 :white_check_mark: 012018
09/1987 :white_check_mark: 091987

¹ Recebido - Valor recebido no servidor. É o valor que será usado nos procedimentos e comandos SQL.

Usando ComboBoxes

Também é possível usar dois campos do tipo ComboBox: Um para o usuário selecionar o Mês e outro para selecionar Ano.

Siga os passos abaixo para criar o campo do Mês:

  • Adicione um campo do tipo ComboBox no Formulário.
  • Na propriedade “Itens” da categoria “Dados” informe uma lista de Valores de 1 a 12. Se preferir pode usar o nome de cada mês na Coluna Texto ao invés do número.

Siga os passos abaixo para criar o campo Ano:

  • Adicione um campo do tipo ComboBox no Formulário.
  • Na propriedade “Fonte de Dados” da categoria “Dados” informe um comando SQL que liste os anos. Veja exemplos abaixo.
  • Configure a ligação dos campos da seguinte forma:
    • Campo de valor: ano
    • Campo com o texto de exibição: ano
    • Campo de ordenação: ano DESC

O resultado seria parecido com este:

image


Abaixo estão exemplos de comandos SQL que podem ser usados para listar os anos:

ORACLE

with anos AS (
select level ano
    from dual 
    connect by level <= extract(year from sysdate)
)
select ano from anos where ano > 1900

PostgreSQL

select 
   generate_series (1900, extract(year from current_date)::int) ano

SQL Server

with anos as (
    select 1900 as ano
    union all
    select ano + 1 from anos
    where ano < year(getdate())
) 
select * from anos
option (maxrecursion 0)
2 curtidas

Muita bacana Daniel, deu certo aqui. Obrigado pela ajuda. :wink: