Fazer um IF de coluna Data
17/03/2015
0
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
Posts
19/03/2015
Jair Souza
O problema é que você está utilizando o evento CellFormatting
O evento CellFormatting é o equivalente ao RowDataBound...
19/03/2015
Jothaz
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.
19/03/2015
Jair Souza
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; } }
20/03/2015
Jothaz
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.
21/03/2015
Jair Souza
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]
23/03/2015
Jothaz
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.
23/03/2015
Jair Souza
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]
23/03/2015
Jothaz
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
Clique aqui para fazer login e interagir na Comunidade :)