Fazer um IF de coluna Data

17/03/2015

0

Preciso fazer "Se valor da coluna tal for igual a data", Como fazer esta parte dentro do parênteses " (DateTime...)) " :

private 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;

            }
        }
Jair Souza

Jair Souza

Responder

Posts

19/03/2015

Jair Souza

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...
Responder

19/03/2015

Jothaz

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:

if (!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:
                        DateTime dateResult;
			if (DateTime.TryParse(locacaoDataGridView.Rows[i].Cells[3].Value.ToString(), out dateResult))
			{
				e.CellStyle.ForeColor = Color.Red;
			}


Teria de funcionar.
Responder

19/03/2015

Jair Souza

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:

if (!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:
                        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...

private 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...

private 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;
                }
        }
Responder

20/03/2015

Jothaz

Vamos por partes:

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

 
                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:

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


e veja o resultado.
Responder

21/03/2015

Jair Souza

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 :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150321-210156.jpg[/img]
Responder

23/03/2015

Jothaz

Jair,

De novo não me leve a mal, mas para desenvolver é necessário ter um conhecimento minimo da IDE, senão fica impossível, principalmente ajudá-lo remotamente. Então sugiro que estudo mais afundo a IDE e os conceitos da tecnologia empregada e depois parta para o desenvolvimento. Claro desenvolver hoje em dia esta tão fácil que qualquer um sem muito conhecimento ou prática consegue avançar, só que sem uma base você fica preso a coisas simples e muitas das vezes aprende a resolver os problema de foram equivocada o que não é uma boa para um profissional.

Não quero de forma alguma desmerecer ou desqualificar seu esforço, só que as vezes os esforço precisa ser focado.

Sobre a immediate window é uma ferramenta impostante para o desenvolvimento assim como o watch. Neles você consegue acesso ao conteúdo das variáveis e objetos em tempo de execução.

No caso da immediate window basta digitar o comando e dar enter que aparecerá o resultado, desde que o projeto esteja em debug e o o bjeto/variável esteja no escopo que esta sendo executado. Veja na imagem alguns exemplos:

[img]http://arquivo.devmedia.com.br/forum/imagem/418027-20150323-152234.png[/img]


Como pode ser visto na image consegui o efeito que você quer usando o código acima. É parecido com o seu e acho que vai atendê-lo. Meu campo é do tipo datetime e virá preenchido ou com null. Veja o resultado obtido:


[img]http://arquivo.devmedia.com.br/forum/imagem/418027-20150323-152137.png[/img]


No caso mudei o BackColor, mas você pode adaptar e usar ForeColor.
Responder

23/03/2015

Jair Souza

Acho que descobri o problema,...Esta coluna "Data de Devolução" é de uma tabela estrangeira e está no grid como um combobox e mesmo estando vazia, quando capturei o seu valor está mostrando o id "5", então na verdade nehuma linha está vazia por isto fica tudo red... ...mas ainda não sei a solução.

Captura da ultima linha..

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150323-174416.jpg[/img]

Combobox :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150323-174344.jpg[/img]
Responder

23/03/2015

Jothaz

Olha esta cada vez mais confuso!

Você saberia dizer qual o motivo da coluna estar como combo? Pois aparentemente não faz sentido isto!

Vou lhe dar uma última sugestão, tente testar o:

combo.SelectedValue
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar