Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rob.coutinho

Mudar valor de coluna de um GridView

Recommended Posts

Tenho o seguinte data grid:

 

Imagem Postada

 

O problema é o seguinte. A tabela tem uns campos do tipo DateTime que, quando um registro é editado, mesmo se não passo valor para o SQL, ele seta o campo pra essa data. Eu queria saber, se tem como filtrar isso para caso a data seja essa, não aparecer no grid. No ASP antigo seria fácil validar isso só fazendo um if no loop, mas no ASP.NET não consigo. Até tentei o evento RowDataBound do GridView mas não consegui.

 

Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, estou usando o seguinte código pra tentar resolver esse problema, mas ainda não funcionou:

 

Protected Sub Lista_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles Lista.RowDataBound

If e.Row.RowType = DataControlRowType.DataRow Then

If e.Row.Cells(5).Text <> "" Then

e.Row.Cells(5).Text.Replace("1/1/1900", " ")

End If

End If

End Sub

 

Alguém saberia me dizer se o caminho é esse?

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse pode ser uma opção, tenta verificar tb. se o valor é NULOoutra alternativa, seria validar isso na própria consulta à base de dadost+

Compartilhar este post


Link para o post
Compartilhar em outros sites

você fez certo em usar o rowdatabound.mas creio q você deve converter a coluna para template, ver o ID do label responsavel por exibir a data e dai você seta o texto do label dentro do evento rowdataboud para o texto q você quer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Macal, a coluna já está como template. Tentei acessar o label pelo seu id como você disse, mas não consegui. O VWD mostra erro, como se eu não tivesse criado esse label. Acho que preciso especificar que o label está dentro do GridView na coluna tal e não sei como fazer isso.

 

Eriva, eu não tenho com filtrar esses dados no select. Esses campos devem ser mostrados no GridView independente da data. Eu só não quero mostrar caso ad ata seja 1/1/1900.

 

Obrigado a todos pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva, eu não tenho com filtrar esses dados no select. Esses campos devem ser mostrados no GridView independente da data. Eu só não quero mostrar caso ad ata seja 1/1/1900.

fala véio,

 

eu não disse filtrar, disse validar...rsss

tipo assim se for SQL Server:

select ISNULL(campoData,'') AS campoData
com isso o registro não vem nulo, já vem vazio

 

 

 

mas se tu não poder fazer isso tenta validar se o campo é nulo no próprio VB, pq. no exemplo que tu enviou você só ta validando se o baguio ta vazio

If e.Row.Cells(5).Text <> "" Then

tenta assim: (bixo não lembro de VB acho que pra validar nulo seria com o nothing)

If e.Row.Cells(5) = Nothing  Then      e.Row.Cells(5).Text = "" End If

tenta ai,

 

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

n uso VB, mas em C# eu faço assim:Label labdata= (Label)e.Row.FindControl("IDdoLabel");ai você pode fazer:labdata.Text = "Texto Desejado";Mudar pra VB isso n deve ser dificil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, não sei oq acontece. Mas não consigo mudar o valor desse grid nem a pau!

 

Tentei todas as alternativas aqui sugeridas, e nada. Pelo FindControl, pela propriedade Text, nada dá certo.

 

Nâo consigo validar o bendito valor "1/1/1900" pra não ser mostrado no Grid.

 

Nâo sei mais oq fazer pra omitir essa data que o idiota do SQL insiste em setar quando não informamos nada no update de um registro.

 

Jà que pelo grid não dá pra fazer isso, tem como fazer alguma rotina direto no sql pra ele limpar essas benditas datas "1/1/1900"?

 

Que saco essa data maldita! http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja tentou isso:

 

If e.Row.Cells(5) = "1/1/1900" Then     e.Row.Cells(5).Text = ""End If

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva, não sei oq eu não tentei! kkkkkkkkkkkkkkkkkkkkkkkkk

 

Jà tentei isso, e td que já foi postado aqui nesse tópico. Atualmente tava tentando o seguinte:

 

Dim datadogrid As Date = e.Row.Cells(5).Text

Dim dtNow As DateTime = Date.Now

If CDate(datadogrid) < CDate(dtNow) Then

e.Row.Cells(5).Visible = False

End If

Mas pra variar? Nâo deu certo rsrs Esse negócio de data tá me tirando o sono http://forum.imasters.com.br/public/style_emoticons/default/dormindo.gif !

 

 

Quem puder me ajudar, aí vai meu msn:

 

aefalaserio@hotmail.com

 

Toda e qq ajuda é bem vinda! Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz q f&%@ hein

 

tenta fazer no banco, se for SQL Server tenta usar o CASE

select case when seuCampo = null or seuCampo < '1900/01/01' then 'vazio' else seuCampo end

Compartilhar este post


Link para o post
Compartilhar em outros sites
Eriva, não entendi mt bem esse select não. Quando executo ele dá erro no ASP.NET. Como ele ficaria num campo com nome agendadopara e pra validar um falor como "1/1/1900"?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva, não entendi mt bem esse select não. Quando executo ele dá erro no ASP.NET. Como ele ficaria num campo com nome agendadopara e pra validar um falor como "1/1/1900"?

esqueci de avisar, qdo. se usa alguma função no sql server o campo fica sem nome, é necessário colocar um apelido (alias),

 

vai ficar +ou- assim:

select case when seuCampo = null or seuCampo < '1900/01/01' then 'vazio' else seuCampo end AS [seuCampo], .... blablabla
testa o select antes para ver o resultado no query analyser se for SQL Server 2000 ou testa no SQL Server Management Studio Express se for no SQL Server 2005

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tb não deu certo. Nâo sei se estou fazendo algo errado na string. De qq forma, apelei. Mudei o campo de DateTime pra Char(10) e bola pra frente. Vai ser f*** se eu vir a precisar por ex fazer um Between entre datas mas por enquanto, foi oq resolveu rsrs

 

Enquanto isso eu vou vendo em paralelo oq faço pra resolver isso, mas sem precisar mudar o campo de datetime pra char.

 

Vlw pela força Eriva e galera!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tb não deu certo. Nâo sei se estou fazendo algo errado na string. De qq forma, apelei. Mudei o campo de DateTime pra Char(10) e bola pra frente. Vai ser f*** se eu vir a precisar por ex fazer um Between entre datas mas por enquanto, foi oq resolveu rsrs

 

Enquanto isso eu vou vendo em paralelo oq faço pra resolver isso, mas sem precisar mudar o campo de datetime pra char.

 

Vlw pela força Eriva e galera!

boa idéia, melhor ainda se só converter a coluna no select, dai não precisa trocar o tipo de dados, para não ter o problema que tu disse se precisar fazer o between

 

pra converter em sql server, é só usar o comando CONVERT

select convert(varchar(10),seuCampo,103) as seuCampo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eriva, foi exatamente isso que pensei. Pq não invertemos e ao invés do campo data um text e fazermos o select convertendo pra data não é? Me pareceu mt mais fácil assim tb e embora ainda não tenha testado o Between sei que não vou ter problemas com isso.

 

Mas vou te dizer uma coisa. Isso foi uma "gambiarra". Embora funcione, não fiquei contente pois o certo era o campo ser datetime e funcionar. Mas, vai saber oq acontece nos servidores alheios? Principalmente nas Locaweb da vida? Oq eu tentei resolver isso, via programação não foi fácil. Discuti e briguei mt com eles tb, mudando até Collation do SQL. Quer dizer, nada deu certo.

 

Essa foi uma solução emergencial mas não deixei a causa não. Depois, com tempo, vou fazer vários testes com esses campos datetime pq não me conformo que não consiga fazer um simples select num campo desse tipo. Tb não me conformo que o SQL não divulge 4/9/2007 de 9/4/2007 e vou tirar isso a limpo sim.

 

Mas vlw pela atenção e pela ajuda. E como diz a Grobo, agente se vê por aqui rsrs

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.