none
verificar data faltante datagrid vb.net RRS feed

  • Pergunta

  • 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? 
    quinta-feira, 9 de fevereiro de 2012 01:12

Respostas

  • Farei em C#, dai vc usa a mesma lógica para VB.NET. 

    vou fazer um metodo que retorna um coleção de datas QUE FALTA NO GRID. Dai vc escolhe en qual evento vai chama-lo e onde vai exibir essas datas.

    public List<DateTime> retornaDatasFaltantes()

    {  

                var oRetorno = new List<DateTime>();

                //PEGO A PRIMEIRA DATA APENAS PARA TER O MES E O ANO
                var DataAux = Convert.ToDateTime(seuGrid.Rows[0].Cells[0].Text);


                //PEGO O MES E INICIO O DIA COMO 1
                DataAux = Convert.ToDateTime( "01" + "/" + DataAux.Month + "/" + DataAux.Year);


                //PEGO O MES
                var mes = DataAux.Month;


                //VOU ADICIONANDO DIAS ATÉ MUDAR O MES 
                while (DataAux.Month == mes)
                {
                    oRetorno.Add(DataAux.Date);//ALIMENTO A LISTA COM OS DIS DO MES. DEPOIS REMOVO OS QUE TEM NO GRID
                    DataAux.AddDays(1);
                }

                for (int i = 0; i < seuGrid.Rows.Count; i++)//PERCORRO O GRID REMOVENDO DA LISTA OS DIAS QUE TEM NO GRID
                {
                    //removo as datas que tem o grid ficando apenas as que nao tem no grid
                    oRetorno.RemoveAll(x => x == Convert.ToDateTime(seuGrid.Rows[i].Cells[0].Text).Date);
                }

                return oRetorno; // O RETORNO SERÁ OS DIAS QUE FALTAM NO DATAGRID

    }

    Se respondeu a sua pergunta marque a resposta.

    Bons estudos.


    • Editado Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 09:02
    • Sugerido como Resposta Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 10:32
    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 02:24
  • vale lembrar que tem que colocar o index correto da celula que está a data. EX:

    Convert.ToDateTime(seuGrid.Rows[i].Cells[index_que_esta_a_Cedula_data].Text).Date);



    • Editado Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 09:05
    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 02:25
  • Olha, Gostaria de responder a pergunta em 100% (veja pela hora que te respondi), porém nem tenho VB.NET na minha maquina. Acredito que não está dificil a tradução pois a logica aplicada é Padrão .NET. Verifique o comentario do código e faça em VB.NET.


     

    public List<DateTime> retornaDatasFaltantes() //DECLARA UM MÉTODO QUE RETORNO UMA LISTA DE DATAS

    {  

                var oRetorno = new List<DateTime>(); //DECLARE UMA VARIAVEL DO TIPO LISTA DE DATAS( SERÁ O RETORNO)
     

                 //DECLARA UMA VARIAVEL DO TIPO DATA E COLOCA A PRIMEIRA DATA DO GRID NELA. ISSO É PARA SABER O MES E ANO DAS DATAS DO GRID.
                var DataAux = Convert.ToDateTime(seuGrid.Rows[0].Cells[0].Text);

                //PEGA A DATA E INICIA OS DIA DELA COMO 1. 
                DataAux = Convert.ToDateTime( "01" + "/" + DataAux.Month + "/" + DataAux.Year);

                //PEGO O MES DA DATA. ISO É PARA SABER QUANTOS DIAS TEM ESSE MÊS
                var mes = DataAux.Month;


                //VOU ADICIONANDO DIAS ATÉ MUDAR O MES 
                while (DataAux.Month == mes)
                {
                    oRetorno.Add(DataAux.Date);//ALIMENTO A LISTA COM OS DIAS DO MES. DEPOIS REMOVO OS QUE TEM NO GRID
                   

                    DataAux.AddDays(1); //ADICIONA TODOS OS DIAS DO MES NA LISTA DE DARTAS QUE VC CRIOU LÁ ENCIMA
                }

                for (int i = 0; i < seuGrid.Rows.Count; i++)//PERCORRE TODAS AS LINHAS DO GRID 
                {
                    //REMOVO DA LISTA QUE TEM TODAS AS DATAS, AS QUE SÃO IGUAIS A DA LINHA DO GRID QUE ESTOU PERCORRENDO.
                    oRetorno.RemoveAll(x => x == Convert.ToDateTime(seuGrid.Rows[i].Cells[0].Text).Date);
                }

                return oRetorno; // O RETORNO SERÁ OS DIAS QUE FALTAM NO DATAGRID

    }

    AMIGO, ESTÁ TUDO COMENTADINHO,  FAZ UM PEQUENO ESFORÇO QUE VC CONSEGUE. 

    SE A RESPOSTA FOI UTIL MARQUE COMO RESPOSTA.

    BONS ESTUDOS.

    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 10:43
  • não terá problema!

    É independente da ordem. A função RemoveAll remove da lista onde a data for igual a Convert.ToDateTime(seuGrid.Rows[i].Cells[0].Text).Date);

    vale lembrar que tem que colocar o index correto da celula que está a data. EX:

    Convert.ToDateTime(seuGrid.Rows[i].Cells[index_que_esta_a_Cedula_data].Text).Date);


    se ao menos ajudouo, masque como resposta ;)
    • Editado Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 13:46
    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 11:29
  • E ai amigo, resolveu?

    marque se alguma reposta ao menos ajudou ;)

    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 22:50

Todas as Respostas

  • Farei em C#, dai vc usa a mesma lógica para VB.NET. 

    vou fazer um metodo que retorna um coleção de datas QUE FALTA NO GRID. Dai vc escolhe en qual evento vai chama-lo e onde vai exibir essas datas.

    public List<DateTime> retornaDatasFaltantes()

    {  

                var oRetorno = new List<DateTime>();

                //PEGO A PRIMEIRA DATA APENAS PARA TER O MES E O ANO
                var DataAux = Convert.ToDateTime(seuGrid.Rows[0].Cells[0].Text);


                //PEGO O MES E INICIO O DIA COMO 1
                DataAux = Convert.ToDateTime( "01" + "/" + DataAux.Month + "/" + DataAux.Year);


                //PEGO O MES
                var mes = DataAux.Month;


                //VOU ADICIONANDO DIAS ATÉ MUDAR O MES 
                while (DataAux.Month == mes)
                {
                    oRetorno.Add(DataAux.Date);//ALIMENTO A LISTA COM OS DIS DO MES. DEPOIS REMOVO OS QUE TEM NO GRID
                    DataAux.AddDays(1);
                }

                for (int i = 0; i < seuGrid.Rows.Count; i++)//PERCORRO O GRID REMOVENDO DA LISTA OS DIAS QUE TEM NO GRID
                {
                    //removo as datas que tem o grid ficando apenas as que nao tem no grid
                    oRetorno.RemoveAll(x => x == Convert.ToDateTime(seuGrid.Rows[i].Cells[0].Text).Date);
                }

                return oRetorno; // O RETORNO SERÁ OS DIAS QUE FALTAM NO DATAGRID

    }

    Se respondeu a sua pergunta marque a resposta.

    Bons estudos.


    • Editado Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 09:02
    • Sugerido como Resposta Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 10:32
    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 02:24
  • vale lembrar que tem que colocar o index correto da celula que está a data. EX:

    Convert.ToDateTime(seuGrid.Rows[i].Cells[index_que_esta_a_Cedula_data].Text).Date);



    • Editado Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 09:05
    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 02:25
  • Renato, muito obrigado pelo retorno, mas teria o código em VB.NET? Não entendo praticamente nada de C#.

    Muito Obrigado.

    quinta-feira, 9 de fevereiro de 2012 09:45
  • Olha, Gostaria de responder a pergunta em 100% (veja pela hora que te respondi), porém nem tenho VB.NET na minha maquina. Acredito que não está dificil a tradução pois a logica aplicada é Padrão .NET. Verifique o comentario do código e faça em VB.NET.


     

    public List<DateTime> retornaDatasFaltantes() //DECLARA UM MÉTODO QUE RETORNO UMA LISTA DE DATAS

    {  

                var oRetorno = new List<DateTime>(); //DECLARE UMA VARIAVEL DO TIPO LISTA DE DATAS( SERÁ O RETORNO)
     

                 //DECLARA UMA VARIAVEL DO TIPO DATA E COLOCA A PRIMEIRA DATA DO GRID NELA. ISSO É PARA SABER O MES E ANO DAS DATAS DO GRID.
                var DataAux = Convert.ToDateTime(seuGrid.Rows[0].Cells[0].Text);

                //PEGA A DATA E INICIA OS DIA DELA COMO 1. 
                DataAux = Convert.ToDateTime( "01" + "/" + DataAux.Month + "/" + DataAux.Year);

                //PEGO O MES DA DATA. ISO É PARA SABER QUANTOS DIAS TEM ESSE MÊS
                var mes = DataAux.Month;


                //VOU ADICIONANDO DIAS ATÉ MUDAR O MES 
                while (DataAux.Month == mes)
                {
                    oRetorno.Add(DataAux.Date);//ALIMENTO A LISTA COM OS DIAS DO MES. DEPOIS REMOVO OS QUE TEM NO GRID
                   

                    DataAux.AddDays(1); //ADICIONA TODOS OS DIAS DO MES NA LISTA DE DARTAS QUE VC CRIOU LÁ ENCIMA
                }

                for (int i = 0; i < seuGrid.Rows.Count; i++)//PERCORRE TODAS AS LINHAS DO GRID 
                {
                    //REMOVO DA LISTA QUE TEM TODAS AS DATAS, AS QUE SÃO IGUAIS A DA LINHA DO GRID QUE ESTOU PERCORRENDO.
                    oRetorno.RemoveAll(x => x == Convert.ToDateTime(seuGrid.Rows[i].Cells[0].Text).Date);
                }

                return oRetorno; // O RETORNO SERÁ OS DIAS QUE FALTAM NO DATAGRID

    }

    AMIGO, ESTÁ TUDO COMENTADINHO,  FAZ UM PEQUENO ESFORÇO QUE VC CONSEGUE. 

    SE A RESPOSTA FOI UTIL MARQUE COMO RESPOSTA.

    BONS ESTUDOS.

    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 10:43
  • Ok, Renato, estou convertendo o código aqui e creio que vai dar certo, mas ainda tenho uma dúvida, na verdade um porém, dessa forma aqui, por exemplo se a data estiver em uma ordem diferente entre o datagrid e a do List, vai ter problema? Ex.:

    Datagrid:

    01/02/2012 - 1º Linha

    02/02/2012 - 2º Linha

    03/02/2012 - 3º Linha

    List

    02/02/2012 - 1º Linha

    03/02/2012 - 2º Linha

    01/02/2012 - 3º Linha

    Muito Obrigado pela atenção.

    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    • Não Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 11:26
  • não terá problema!

    É independente da ordem. A função RemoveAll remove da lista onde a data for igual a Convert.ToDateTime(seuGrid.Rows[i].Cells[0].Text).Date);

    vale lembrar que tem que colocar o index correto da celula que está a data. EX:

    Convert.ToDateTime(seuGrid.Rows[i].Cells[index_que_esta_a_Cedula_data].Text).Date);


    se ao menos ajudouo, masque como resposta ;)
    • Editado Renato Coqueiro quinta-feira, 9 de fevereiro de 2012 13:46
    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 11:29
  • E ai amigo, resolveu?

    marque se alguma reposta ao menos ajudou ;)

    • Marcado como Resposta Altair_147 quinta-feira, 9 de fevereiro de 2012 23:13
    quinta-feira, 9 de fevereiro de 2012 22:50
  • Opa amigo, desculpe é que tive tempo para testar somente agora a noite,

    Cara funcionou perfeitamente....

    Valeu e muito Obrigado

    quinta-feira, 9 de fevereiro de 2012 23:12
  • Que isso , precisando estamos a disposição!
    quinta-feira, 9 de fevereiro de 2012 23:40