Usuário com melhor resposta
verificar data faltante datagrid vb.net

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?
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
-
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
-
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
-
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
-
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
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
-
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
-
-
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
-
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
-
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
-
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
-
-