Fazer um IF de coluna Data
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
Curtidas 0
Respostas
Randrade
17/03/2015
Explique um pouco melhor o que você precisa, pois dessa forma não está claro, e dificultando possíveis respostas.
GOSTEI 0
Jair Souza
17/03/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.
Agradeço o interesse em ajudar.
GOSTEI 0
Jothaz
17/03/2015
Pesquise por:
DateTime.TryParse
Ou DateTime.Parse:
DateTime.TryParse
Ou DateTime.Parse:
string strDate = obj.ToString(); try { DateTime dt = DateTime.Parse(strDate); if(dt != DateTime.MinValue && dt != DateTime.MaxValue) return true; return false; } catch { return false; }
GOSTEI 0
Thiago Santana
17/03/2015
tente utilizar o Convert.ToDateTime
GOSTEI 0
Jair Souza
17/03/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 ?
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150318-173303.jpg[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150318-173303.jpg[/img]
GOSTEI 0
Randrade
17/03/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.
GOSTEI 0
Jair Souza
17/03/2015
É... foi deste link que comecei meu código...mesmo assim obrigado.
GOSTEI 0
Thiago Santana
17/03/2015
Se for pra comparar com a data atual, basta chamar DateTime.Now
GOSTEI 0
Jair Souza
17/03/2015
Não é a data atual, são datas variadas de devolução de locações...
GOSTEI 0
Thiago Santana
17/03/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
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
GOSTEI 0
Jothaz
17/03/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:
Não testei o exemplo acima, então esta passível de conter erro. É só uma ideia de como pode ser feito.
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:
//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.
GOSTEI 0
Jair Souza
17/03/2015
Inicialmente eu tinha o código assim :
Mas assim ficam todas as linhas color.red...
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...
GOSTEI 0
Jothaz
17/03/2015
Inicialmente eu tinha o código assim :
Mas assim ficam todas as linhas color.red...
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.
GOSTEI 0
Thiago Santana
17/03/2015
Jair acho que você está utilizando o evento errado do seu GridView!
O problema é que você está utilizando o evento CellFormatting
O problema é que você está utilizando o evento CellFormatting
GOSTEI 0
Jair Souza
17/03/2015
Inicialmente eu tinha o código assim :
Mas assim ficam todas as linhas color.red...
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 :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150319-151428.jpg[/img]
GOSTEI 0
Jair Souza
17/03/2015
Jair acho que você está utilizando o evento errado do seu GridView!
O problema é que você está utilizando o evento CellFormatting
O problema é que você está utilizando o evento CellFormatting
O evento CellFormatting é o equivalente ao RowDataBound...
GOSTEI 0
Jothaz
17/03/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:
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:
Teria de funcionar.
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.
GOSTEI 0
Jair Souza
17/03/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:
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:
Teria de funcionar.
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; } }
GOSTEI 0
Jothaz
17/03/2015
Vamos por partes:
Antes de mais nada tente forçar a ficar preto e só jogar vermelho quando entra no if:
Se o erro persistir dê um brakpoint no if dentro do for e faça o teste na immediate windows:
e veja o resultado.
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.
GOSTEI 0
Jair Souza
17/03/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 :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150321-210156.jpg[/img]
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]
GOSTEI 0
Jothaz
17/03/2015
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.
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.
GOSTEI 0
Jair Souza
17/03/2015
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]
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]
GOSTEI 0
Jair Souza
17/03/2015
Consegui, passei esta coluna textbox e para carregá-lo fiz INNER JOIN :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150323-175852.jpg[/img]
Valeu !
Descuple os rolos !
SELECT DISTINCT L.IDLocacao, L.IDLocatario, L.IDFuncionario, L.Hora, L.DataSaida, L.[Valor da Locacao], L.DataEntrega, ITEM.[Data de Devolucao] FROM (Locacao L INNER JOIN ItemLocacao ITEM ON L.IDLocacao = ITEM.IDLocacao)
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150323-175852.jpg[/img]
Valeu !
Descuple os rolos !
GOSTEI 0
Jothaz
17/03/2015
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:
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
GOSTEI 0