Ir para conteúdo

Arquivado

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

João Arruda

[Resolvido] Atualizar dados da página automaticamente

Recommended Posts

Tenho um projeto em ASP.NET de um consultório médico, onde os pacientes são registrados em um banco de dados SQL 2005 e, à medida que eles chegam para o atendimento, a recepção avisa ao médico, via computador, que tal paciente está na sala de espera. Quando der o horário de tal paciente, o médico avisa à recepção, que o chama e ele entra no consultório. Isso tudo passando as informações de chegada e atendimento diretamente à tabela do usuário no banco de dados e automaticamente atualizando a informação na tela ou do médico ou da recepção.

 

Minha dúvida é a seguinte:

 

Como posso fazer com que a página em ASP.NET reconheça a alteração no banco de dados e automaticamente atualize a página, quando tal alteração ocorrer?

 

Já tentei diversos métodos, até com CacheDependency, mas nenhum funcionou. Será que alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você diz no exato momento da alteração o banco avisa à página isso não ocorre, lembre-se que na web a coisa é desconectada, ocê manda uma solicitação e servidor te devolve um html para o lado cliente

 

O que você pode fazer é com que a página tenha uma espécie de temporizador como existe nessas paginas de tempo de real de jogo de futebol e de tempos em tempos ele visualiza se houve alteração no banco.

 

O que acontece é algo do tipo como o servidor perguntando, "teve mudança banco?"

 

O contrario que seria o banco falando "página houve uma alteração"não tem.

 

Para fazer isso que falei você pode usar javascript com SetInterval ou ajax com o controle timer, que basicamente usa setinterval, mas já tá tudo pronto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você diz no exato momento da alteração o banco avisa à página isso não ocorre, lembre-se que na web a coisa é desconectada, ocê manda uma solicitação e servidor te devolve um html para o lado cliente

 

O que você pode fazer é com que a página tenha uma espécie de temporizador como existe nessas paginas de tempo de real de jogo de futebol e de tempos em tempos ele visualiza se houve alteração no banco.

 

O que acontece é algo do tipo como o servidor perguntando, "teve mudança banco?"

 

O contrario que seria o banco falando "página houve uma alteração"não tem.

 

Para fazer isso que falei você pode usar javascript com SetInterval ou ajax com o controle timer, que basicamente usa setinterval, mas já tá tudo pronto.

 

Sim, obrigado, mas acontece que eu já tentei usar o Javascript com SetInterval, mas não sei porque, a página só executou o comando ASP que inseri no código Javascript uma vez, ou seja, não fica atualizando de tempos em tempos... E se executa apenas uma vez, não haverá alterações nesta vez, certo (se for de um em um segundo)?

E em questão de AJAX, o timer até é válido na questão de atualização da página, mas acontece que há outras operações a serem feitas na mesma página, aí o timer, pelo que eu percebi (não sou muito experiente em AJAX) derruba a sessão a cada intervalo de tempo estipulado, ou seja, o que estava na página é perdido (caso for um campo de texto a digitar)... E também fazer de um em um segundo ficaria desconfortável para o usuário, já que a página daria uma "piscada" a cada segundo.

Não há mesmo outra maneira de se fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise como fazer em javascript ou jquery como executar uma ação a cada tanto tempo.

Fiz um chat em uma aplicação que fiz desta forma, ae meu método do javascript chama um método c# para fazer uma nova consulta ao banco.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise como fazer em javascript ou jquery como executar uma ação a cada tanto tempo.

Fiz um chat em uma aplicação que fiz desta forma, ae meu método do javascript chama um método c# para fazer uma nova consulta ao banco.

 

Abraços...

 

Foi o que eu já tentei fazer, fazer uma chamada a uma função do Codebehind no javascript de tempos em tempos, mas estranhamente não funcionou.

Aqui vai o código em Javascript e a função em VB.NET:

<script type="text/javascript">                       
           function atualizar() {           
           <% atualiza() %>;
           }       
       window.setInterval("atualizar()", 1000);
   </script>

Function atualiza() As Object
       SqlDataSource1.Select(DataSourceSelectArguments.Empty)
       DataList1.DataSourceID = "SqlDataSource1"
   End Function

Esta função funciona, porque chamei-a num botão e deu certo, mas quero que ela se execute automaticamente... Só que não tá dando D:

 

Eu vi outro dia algo sobre SQL Cache Dependency, algo do tipo: o SQL Data Source armazena no objeto definido um cache com as informações resgatadas do banco, durante um determinado tempo, ou até o banco mudar. Quando ocorrer uma dessas duas coisas (o tempo expirar ou o banco mudar), o cache é invalidado e o SQL Data Source busca novas informações no banco, atualizando automaticamente... Era exatamente isso que eu queria fazer, só que tentei, mas não funfo...

Alguém poderia me ajudar nesta questão? Alguém sabe como utilizar certinho o SQL Cache Dependency?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa função atualizar () está do lado do servidor(server-side), e a função javascript está no lado Cliente(client-side)..

 

São ambientes diferentes, utilizando as bibliotecas do Ajax até dá pra fazer isso, mas me falha isso agora pois a muito tempo não faço isso...

 

Como uma solução mais rápida, na função atualizar (javascript) faz assim cria duas funções

 

//essa função deve ser usada no window.load
//a cada 10 segundos ele recarrega a página
functiona carrega() {
window.setinterval("atualizar",10000)
}

//essa função recarrega a página atual
functiona atualizar() {
window.location.href =window.location.href
}

 

[/i]uma solução mais elaborada caso você tenha um layout legal e não queira que esse cara fique piscando a cada post back é você colocar essa página que recarrega em um frame

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa função atualizar () está do lado do servidor(server-side), e a função javascript está no lado Cliente(client-side)..

 

São ambientes diferentes, utilizando as bibliotecas do Ajax até dá pra fazer isso, mas me falha isso agora pois a muito tempo não faço isso...

 

Como uma solução mais rápida, na função atualizar (javascript) faz assim cria duas funções

 

//essa função deve ser usada no window.load
//a cada 10 segundos ele recarrega a página
functiona carrega() {
window.setinterval("atualizar",10000)
}

//essa função recarrega a página atual
functiona atualizar() {
window.location.href =window.location.href
}

 

[/i]uma solução mais elaborada caso você tenha um layout legal e não queira que esse cara fique piscando a cada post back é você colocar essa página que recarrega em um frame

 

Obrigado, Daniel, esse esquema do frame (ou iFrame, como eu utilizei) dá cabo do meu problema. A única característica irritante é a barra de carregamento fazer load todo segundo... Mas se isso não atrapalhar na performance, creio que não há problema. Me ponho à disposição do fórum para dúvidas sobre web applications e desenvolvimento .NET.

 

obrigado, mais uma vez :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok

 

é sempre bom mais um pra ajudar, pois é obvio, nem tudo dá pra gente ajudar já que a tecnologia do .net é bastante ampla...

 

Olha só se der pra usar o Ajax, pesquisa o comtrole timer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok

 

é sempre bom mais um pra ajudar, pois é obvio, nem tudo dá pra gente ajudar já que a tecnologia do .net é bastante ampla...

 

Olha só se der pra usar o Ajax, pesquisa o comtrole timer...

 

Já tentei o timer, mas dá o mesmo resultado, com a barra carregando todo segundo, mas valeu pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, só mais uma pequena dúvida... é algo simples, mas que está me dando um pouco de dor de cabeça, logo depois da resolução proposta pelo Daniel...

 

ta certo, criei um iFrame que eu atualizo a cada segundo para ver se tem alteração no banco de dados... Só que neste iFrame tenho uma DataList com templates de LinkButton (são eles que eu atualizo no BD) que, quando clicar nesses LinkButton, o texto contido no LinkButton vai para o cabeçalho de uma tabela ASP na página principal (como se fosse um roteiro médico: clica no nome do paciente e abre na tela principal todas as informações sobre ele). Queria apenas saber como faço para este conteúdo do LinkButton copiar do iFrame para o cabeçalho da tabela na página principal...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você terá que salvar isso em uma sessão ou enviar via querystring. Com javascript novamente você consegue "atualizar" a outra página para o controle ter o valor desejado.

 

Abraços...

 

hmmmmmm... Não creio que isto solucionará meu problema, porque tenho que colocar tudo isso no evento "Click" nos LinkButton... Ou seja, teria que, ao clicar no LinkButton, já aparecer o nome e as informações do cidadão do outro lado... Se eu carregar em uma Session ou até mesmo em querystring, qual será o evento que eu controlo para saber que há algo a mais na Session ou na querystring, entendem? O evento da página no iFrame não conversa com os elementos da página principal :\

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi:

 

porque tenho que colocar tudo isso no evento "Click" nos LinkButton

 

qual será o evento que eu controlo para saber que há algo a mais na Session

 

Ou você irá verificar o Click dos linkbutton, ou irá fazer como explicado acima, usando um timer.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, tudo bem, obrigado pela ajuda de todos. Resolvi este problema abrindo, ao invés de uma tabela na página principal, uma janela tipo pop-up para exibir os dados. Agradeço a todos e até a próxima :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Joao, a coisa é simples. Eu precisei fazer a mesma coisa que você está fazendo para uma financeira. Toda vez que os promotores cadastravam algum contrato, a pessoa responsavel pelo retaguarda recebia na tela dele uma mensagem. Essa mensagem fica dentro de uma div, que com o Jquery eu consigo levantar e descer ela, escondendo. Tipo as mensagens do msn, quando alguem entra no msn. Assim o retaguarda facilita o seu trabalho, sem ter que ficar toda hora viusalizando se existe contrato. Para isso criei uma função com jquery usando o $.get() e chamo ela com o javascript pelo setinterval(). Infelizmente dependendo de como você usar o setinterval, isso pode pesar sua conexao pois isso vai fazer uma busca no servidor toda vez que voce chamar essa função. Por isso indico você usar o setInterval() chamando a cada 10 segundos. Qualquer coisa manda um email para ristone@netplus-es.com.br, eu posso te passar o codigo.

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Joao, a coisa é simples. Eu precisei fazer a mesma coisa que você está fazendo para uma financeira. Toda vez que os promotores cadastravam algum contrato, a pessoa responsavel pelo retaguarda recebia na tela dele uma mensagem. Essa mensagem fica dentro de uma div, que com o Jquery eu consigo levantar e descer ela, escondendo. Tipo as mensagens do msn, quando alguem entra no msn. Assim o retaguarda facilita o seu trabalho, sem ter que ficar toda hora viusalizando se existe contrato. Para isso criei uma função com jquery usando o $.get() e chamo ela com o javascript pelo setinterval(). Infelizmente dependendo de como você usar o setinterval, isso pode pesar sua conexao pois isso vai fazer uma busca no servidor toda vez que voce chamar essa função. Por isso indico você usar o setInterval() chamando a cada 10 segundos. Qualquer coisa manda um email para ristone@netplus-es.com.br, eu posso te passar o codigo.

 

abraços

 

Sei que o post é antigo, mas ainda estou a procura disso ai, pode postar esse Cod não?

 

 

Se for em Ajax jquery já resolve pra min.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie um tópico separado, e vamos averiguar sua dúvida melhor.

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.