DESCOBRIR QUAL DATA FALTA DATAGRID
Bom dia,
Pessoal, estou com uma dúvida aqui, tenho um datagrid que nele tem tem uma coluna com datas, por exemplo, no meu form eu coloco 02/2012, ai eu gero o datagrid com todos os dias de fevereiro de 2012, até ai tudo bem... Só que as vezes pode ser que seja necessário excluir alguma linha, e eu gostaria de poder fazer uma verificação e saber a data da linha que foi excluida, outra coisa é que uma mesma data pode se repetir também. Exemplo.:
01/02/2012
02/02/2012
02/02/2012
Não tem 03/02/2012
04/02/2012
05/02/2012
06/02/2012
06/02/2012
....
....
Aà neste caso eu gostaria de ser avisado que falta o dia 03/02/2012, alguém tem idéia de como fazer?
Pessoal, estou com uma dúvida aqui, tenho um datagrid que nele tem tem uma coluna com datas, por exemplo, no meu form eu coloco 02/2012, ai eu gero o datagrid com todos os dias de fevereiro de 2012, até ai tudo bem... Só que as vezes pode ser que seja necessário excluir alguma linha, e eu gostaria de poder fazer uma verificação e saber a data da linha que foi excluida, outra coisa é que uma mesma data pode se repetir também. Exemplo.:
01/02/2012
02/02/2012
02/02/2012
Não tem 03/02/2012
04/02/2012
05/02/2012
06/02/2012
06/02/2012
....
....
Aà neste caso eu gostaria de ser avisado que falta o dia 03/02/2012, alguém tem idéia de como fazer?
Faça uma seleção distinta. Some os valores dos DIAS que aparecem na lista. Verifique o valor da soma com a progressão aritmética tendo o primeiro e o último dia do mês como base. Se a soma não bater, subtraia o valor dessa soma da constante de progressão que deveria ser. Exemplo:
Sua matriz de dados(dias):
1
2
3
4
...
10
A soma dessa progressão é 55(1+2+3+4...10=55)
Se a soma dos dias da seleção distinta que vc fez der tipo 53, subtraia 55-53, vc vai ter exatamente o dia que está faltando.
Esse é o método mais correto de se fazer isso, pois funciona muito rápido mesmo para matrizes de dados bem longas. A alternativa seria fazer um loop....
Sua matriz de dados(dias):
1
2
3
4
...
10
A soma dessa progressão é 55(1+2+3+4...10=55)
Se a soma dos dias da seleção distinta que vc fez der tipo 53, subtraia 55-53, vc vai ter exatamente o dia que está faltando.
Esse é o método mais correto de se fazer isso, pois funciona muito rápido mesmo para matrizes de dados bem longas. A alternativa seria fazer um loop....
Boa KERPLUNK, adorei a idéia, mas ai têm os poréns, dessa forma ai và aqui que funcionaria perfeitamente, mas pelo que entendi o seu exemplo dá para verificar se estiver faltando apenas um dia, e no meu caso aqui pode acontecer de faltar vários dias.
Bem, digamos que a soma do seus dias, seja 50. Isso quer dizer:
Ou falta o dia 5 ou faltam os dias 2 e 3, certo?
Bem, vc sabe que essa matriz de dias, vai ter um determinado número de Ãtens; Se esse número de Ãtens tiver um dia a menos que o número de Ãtens esperado, é exatamente o dia que falta aquela subtração. Se tiver mais de um Ãtem faltando, crie uma matriz que contenha todos os Ãtens e faça um loop na matriz de dias e na matriz que vc criou(contendo todos os dias esperados). Quando falta mais de um, não existe um cálculo(pelo menos não um simples) de se verificar quais Ãtens faltam, pois pode ser uma sequencia de vários Ãtens espalhados pela matriz.
Ou falta o dia 5 ou faltam os dias 2 e 3, certo?
Bem, vc sabe que essa matriz de dias, vai ter um determinado número de Ãtens; Se esse número de Ãtens tiver um dia a menos que o número de Ãtens esperado, é exatamente o dia que falta aquela subtração. Se tiver mais de um Ãtem faltando, crie uma matriz que contenha todos os Ãtens e faça um loop na matriz de dias e na matriz que vc criou(contendo todos os dias esperados). Quando falta mais de um, não existe um cálculo(pelo menos não um simples) de se verificar quais Ãtens faltam, pois pode ser uma sequencia de vários Ãtens espalhados pela matriz.
Claro, que esse loop, pode ser feito no SQL mesmo, mais ou menos assim:
DECLARE @RETURN TABLE( ID Int); DECLARE @I INT; SET @I = 0; WHILE @I < (SELECT MAX(CODIGO) FROM SUA_TABELA) BEGIN SET @I = @I + 1; INSERT INTO @RETURN (ID) VALUES (@I); END SELECT ID FROM @RETURN AS RETORNO WHERE RETORNO.ID NOT IN (SELECT CODIGO FROM SUA_TABELA)
Isso retornará uma lista de valores que não estão na lista de datas...
DECLARE @RETURN TABLE( ID Int); DECLARE @I INT; SET @I = 0; WHILE @I < (SELECT MAX(CODIGO) FROM SUA_TABELA) BEGIN SET @I = @I + 1; INSERT INTO @RETURN (ID) VALUES (@I); END SELECT ID FROM @RETURN AS RETORNO WHERE RETORNO.ID NOT IN (SELECT CODIGO FROM SUA_TABELA)
Isso retornará uma lista de valores que não estão na lista de datas...
Valeu ai... Vou tentar aqui e qualquer dúvida lhe retorno...
Obrigado....
Obrigado....
Pensei em algo aqui...
Não teria como por exemplo pegar o dia [Ô]01/02/2012[Ô] e percorrer todo o datagrid procurando ele, se tiver fica tudo bem e se ele não encontrar ele retorna avisando que não encontrou em todas as linhas do datagrid.
Sei que será um loop um pouco grande, mas acho que ficaria mais fácil.
Não teria como por exemplo pegar o dia [Ô]01/02/2012[Ô] e percorrer todo o datagrid procurando ele, se tiver fica tudo bem e se ele não encontrar ele retorna avisando que não encontrou em todas as linhas do datagrid.
Sei que será um loop um pouco grande, mas acho que ficaria mais fácil.
Com certeza tem como fazer assim sim. Mas melhor ainda, seria antes de preencher o grid, verificar tudo que se queira verificar. Grid, não é fonte de dados, é somente um visualizador.
Citação:Grid, não é fonte de dados, é somente um visualizador.
Aà entendi, o que acontece é que essa verificação seria antes de gravar os dados que estão sendo mostrados no datagrid.
Então, use uma coleção de objetos que contenham essas datas, e não percorrer o grid...
Desculpe minha ignorância, mas não entendi direito.
Tópico encerrado , respostas não são mais permitidas