Array
(
)

Fazer um IF de coluna Data

Jair Souza
   - 17 mar 2015

Preciso fazer "Se valor da coluna tal for igual a data", Como fazer esta parte dentro do parênteses " (DateTime...)) " :
#Códigoprivate void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if(e.Value != null && e.Value.Equals(DateTime))
{
DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
row.DefaultCellStyle.ForeColor = Color.Red;
}
}

Randrade
   - 18 mar 2015

Explique um pouco melhor o que você precisa, pois dessa forma não está claro, e dificultando possíveis respostas.

Jair Souza
   - 18 mar 2015

Então, se o valor da coluna 3 for igual a um formato de data por exemplo assim "00/00/0000", deixar o forecolor desta LINHA de cor diferente das demais.
Agradeço o interesse em ajudar.

Jothaz
   - 18 mar 2015

Pesquise por:

DateTime.TryParse

Ou DateTime.Parse:

#Código
string strDate = obj.ToString();
try
{
DateTime dt = DateTime.Parse(strDate);
if(dt != DateTime.MinValue && dt != DateTime.MaxValue)
return true;
return false;
}
catch
{
return false;
}

Thiago Santana
   - 18 mar 2015

tente utilizar o Convert.ToDateTime

Jair Souza
   - 18 mar 2015

Ainda não consegui...na imagem abaixo mostra exatamente o resultado esperado com o código que tenho...MAS, para uma data específica, como fazer para qualquer data ?

Clique na imagem para abrir em uma nova janela

Randrade
   - 18 mar 2015

Tente olhar este tutorial, se não conseguir, avise que coloco um exemplo funcional para você. Desculpe colocar apenas o link, é que estou com pouco tempo no momento.

Jair Souza
   - 18 mar 2015

É... foi deste link que comecei meu código...mesmo assim obrigado.

Thiago Santana
   - 18 mar 2015

Se for pra comparar com a data atual, basta chamar DateTime.Now

Jair Souza
   - 18 mar 2015

Não é a data atual, são datas variadas de devolução de locações...

Thiago Santana
   - 19 mar 2015

Se for Web Application utilizando Webform você deverá utilizar o método RowDataBound!
Com ele você pode capturar as informações e manipular várias coisas, se for Windows Form não lembro qual o evento correto do GridView

Jothaz
   - 19 mar 2015

Sinceramente não entendi o que você quer!

Se for quando o campo estiver preenchido deve vir vermelho senão deve ficar preto, por que você não teste null?

Ou na entrada de dados o campo data pode ser preenchido com valores que não sejam data? Se for assim, no meu ponto de vista a modelagem esta equivocada, mas como modelagem é igual fiofó cada um tem a sua kkkkkk, você pode contornar a situação usando o comando que postei DateTime.TryParse, basta ter um pouco de trabalho e criar um método para validar:

#Código

//O teste fica assim, talvez tenha de usar o .ToString, testa ai.
if(e.Value != null && ValidaData(e.Value))

//Método para validar se o conteúdo é DateTime
private bool ValidaData(String ValorData)
{
if (DateTime.TryParse(badInput, out dateTime2))
{
return true;
}
else
{
return false;
}
}


Não testei o exemplo acima, então esta passível de conter erro. É só uma ideia de como pode ser feito.

Jair Souza
   - 19 mar 2015

Inicialmente eu tinha o código assim :

#Código private void locacaoDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i < locacaoDataGridView.Rows.Count; i++)

if (!String.IsNullOrEmpty((string)locacaoDataGridView.Rows[i].Cells[3].Value.ToString()))
{
e.CellStyle.ForeColor = Color.Red;
}
}


Mas assim ficam todas as linhas color.red...

Jothaz
   - 19 mar 2015


Citação:
Inicialmente eu tinha o código assim :

#Código private void locacaoDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i < locacaoDataGridView.Rows.Count; i++)

if (!String.IsNullOrEmpty((string)locacaoDataGridView.Rows[i].Cells[3].Value.ToString()))
{
e.CellStyle.ForeColor = Color.Red;
}
}


Mas assim ficam todas as linhas color.red...


Você não respondeu o que perguntei! Como não sei claramente qual a regra nem conheço seu ambiente fica difícil ajudar!

O código que você postou deixar vermelho todos os campos diferentes de null ou empty.

Qual a regra que você que implementar?

Qual o conteúdo do campo?
É uma data?
Ou pode ser uma Data ou um outro valor que não seja uma data?

Se a regra para deixar vermelho for ser diferente de null/empty e deve ser uma Data válida é só implementar o código que postei.

Thiago Santana
   - 19 mar 2015

Jair acho que você está utilizando o evento errado do seu GridView!
O problema é que você está utilizando o evento CellFormatting

Jair Souza
   - 19 mar 2015


Citação:

Citação:
Inicialmente eu tinha o código assim :

#Código private void locacaoDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
for (int i = 0; i < locacaoDataGridView.Rows.Count; i++)

if (!String.IsNullOrEmpty((string)locacaoDataGridView.Rows[i].Cells[3].Value.ToString()))
{
e.CellStyle.ForeColor = Color.Red;
}
}


Mas assim ficam todas as linhas color.red...


Você não respondeu o que perguntei! Como não sei claramente qual a regra nem conheço seu ambiente fica difícil ajudar!

O código que você postou deixar vermelho todos os campos diferentes de null ou empty.

Qual a regra que você que implementar?

Qual o conteúdo do campo?
É uma data?
Ou pode ser uma Data ou um outro valor que não seja uma data?

Se a regra para deixar vermelho for ser diferente de null/empty e deve ser uma Data válida é só implementar o código que postei.


Primeiro desculpe se ficou confuso, recapitulando :

O campo é somente data, veja na imagem :

Clique na imagem para abrir em uma nova janela

Jair Souza
   - 19 mar 2015


Citação:
Jair acho que você está utilizando o evento errado do seu GridView!
O problema é que você está utilizando o evento CellFormatting


O evento CellFormatting é o equivalente ao RowDataBound...

Jothaz
   - 19 mar 2015

Jair,

Não quero ser chato, mas sem uma elaboração compreensível da questão fica difícil e frustante. E em TI é fundamental conhecer a regra a ser implementada senão não se chega a lugar nenhum.

Então Data de Devoluão (3 coluna do grid) é um campo data, que quando vier preenchido deve ficar vermelho do contrário deve ficar preto?

Usando:

#Códigoif (!String.IsNullOrEmpty((string)locacaoDataGridView.Rows[i].Cells[3].Value.ToString()))

mesmo os registro com conteúdo em branco ficam com a linha vermelha?

Teoricamente era para funcionar!

Tente debugar e verificar qual o conteúdo do campo! Se é null ou "" e use a immediate window para fazer os testes.

Ou tente usar a função que lhe passei, pois o DateTime.TryParse valida se a data e datas em branco ou null são invalidas:
#Código
DateTime dateResult;
if (DateTime.TryParse(locacaoDataGridView.Rows[i].Cells[3].Value.ToString(), out dateResult))
{
e.CellStyle.ForeColor = Color.Red;
}


Teria de funcionar.

Jair Souza
   - 19 mar 2015


Citação:
Jair,

Não quero ser chato, mas sem uma elaboração compreensível da questão fica difícil e frustante. E em TI é fundamental conhecer a regra a ser implementada senão não se chega a lugar nenhum.

Então Data de Devoluão (3 coluna do grid) é um campo data, que quando vier preenchido deve ficar vermelho do contrário deve ficar preto?

Usando:

#Códigoif (!String.IsNullOrEmpty((string)locacaoDataGridView.Rows[i].Cells[3].Value.ToString()))

mesmo os registro com conteúdo em branco ficam com a linha vermelha?

Teoricamente era para funcionar!

Tente debugar e verificar qual o conteúdo do campo! Se é null ou "" e use a immediate window para fazer os testes.

Ou tente usar a função que lhe passei, pois o DateTime.TryParse valida se a data e datas em branco ou null são invalidas:
#Código
DateTime dateResult;
if (DateTime.TryParse(locacaoDataGridView.Rows[i].Cells[3].Value.ToString(), out dateResult))
{
e.CellStyle.ForeColor = Color.Red;
}


Teria de funcionar.


É o meu primeiro projeto...

Para as todas suas perguntas a resposta é sim.

Usei este método para capturar o valor das células em branco desta coluna 3, e sempre mostra vazio...

#Códigoprivate void button1_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow item in locacaoDataGridView.Rows)
{
string datadev = item.Cells[3].Value.ToString();

textBox1.Text = datadev;
}
}


E usando este método que passaste, continua ficando tudo Color.Red...

#Códigoprivate void locacaoDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DateTime dateResult;

for (int i = 0; i < locacaoDataGridView.Rows.Count; i++)

if (DateTime.TryParse(locacaoDataGridView.Rows[i].Cells[3].Value.ToString(), out dateResult))
{
e.CellStyle.ForeColor = Color.Red;
}
}

Jothaz
   - 20 mar 2015

Vamos por partes:

Antes de mais nada tente forçar a ficar preto e só jogar vermelho quando entra no if:

#Código

e.CellStyle.ForeColor = Color.Black;

if (DateTime.TryParse(locacaoDataGridView.Rows[i].Cells[3].Value.ToString(), out dateResult))
{
e.CellStyle.ForeColor = Color.Red;
}


Se o erro persistir dê um brakpoint no if dentro do for e faça o teste na immediate windows:

#Código
DateTime dateResult;
DateTime.TryParse(locacaoDataGridView.Rows[0].Cells[3].Value.ToString(), out dateResult))



e veja o resultado.

Jair Souza
   - 21 mar 2015

A sua primeira dica não mudou nada.

A segunda não pude ir além disto, pois ainda não sei usar immediate windows :

Clique na imagem para abrir em uma nova janela