ASP.NET - Tratando datas em Web Forms c/o componente calendar
Já falei sobre o objeto calendar no artigo - ASP.NET - Usando o objeto Calendar. Neste artigo vou mostrar uma das muitas aplicações que podemos criar usando este objeto.
Vou mostrar como podemos fazer a entrada de datas em um Web form usando o objeto calendar através de uma janela pop-up aberta via javascript.
Para você ver como funciona clique no link : calendário em web form
Inicialmente o navegador vai exibir um web form com duas caixas de texto ; cada uma com um ícone que representa um calendário. Ao clicar no ícone do calendário iremos ter uma janela popup que exibira o calendário conforme abaixo:
Selecionando a data em cada uma das caixas de texto iremos ter:
Muito prático não é mesmo ? Vou então mostrar como podemos implementar isto usando ASP.NET e JavaScript.
Eu estou usando dois arquivos : Datas.aspx e Calendario.aspx
1- O arquivo Datas.aspx exibe o formulário com as caixas de de texto e os ícones dos formulários. O código deste arquivo é o seguinte:
<%@ Page Language="vb" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Usando Calendário para informar datas</title> </head> <body> <p><img border="0" src="maco1a.gif" width="299" height="54"> <b> <font face="Verdana" color="#800080"> Usando o objeto Calendar para entrada de datas em formulários</font></b></p> <hr> <form id="Form1" method="post" runat="server"> <table> <tr> <td align="right"> Data Iníco: </td> <td align="left"> <asp:TextBox ID="txtInicio" Runat="server" /> </td> <td align="center"> <a href="javascript:;" onclick="window.open('calendario.aspx?textbox=txtInicio','cal','width=250,height=225,left=270,top=180')"> <img src="calendario.gif" border="0" width="16" height="16"></a> </td> </tr> <tr> <td align="right"> Data Final: </td> <td align="left"> <asp:TextBox ID="txtFim" Runat="server" /> </td> <td align="center"> <a href="javascript:;" onclick="window.open('calendario.aspx?textbox=txtFim','cal','width=250,height=225,left=270,top=180')"> <img src="calendario.gif" border="0" width="16" height="16"></a> </td> </tr> </table> </form> <p><font face="Verdana" size="2">Para incluir uma data clique no ícone do calendário e selecione a data desejada.</font></p> <p><b><font face="Verdana" color="#FF0000">Quer mais dicas sobre ASP.NET? </font><font face="Verdana" size="2" color="#FF0000"> visite : <a href="http://www.macoratti.net">www.macoratti.net</a></font></b></p> </body> </html>
|
Cabe destacar no código apenas as linhas que estão na cor azul negritado.
1- A linha de código abaixo declara a caixa de texto txtInicio
<asp:TextBox ID="txtInicio" Runat="server" />
2- A linha de código abaixo declara a caixa de texto txtFim
<asp:TextBox ID="txtFim" Runat="server" />
3- A linha de código a seguir refere-se o ícone do calendário da caixa de texto txtInicio e usa o comando javascript window.open para abrir o arquivo : calendario.aspx na posição determinada pelas propriedades : width=250,height=225,left=270,top=180'
Note que estou fazendo uma referência a imagem calendario.gif através da tag : <a href> </a>
<a href="javascript:;" onclick="window.open('calendario.aspx?textbox=txtInicio','cal','width=250,height=225,left=270,top=180')">
<img src="calendario.gif" border="0" width="16" height="16"></a>
O mesmo se aplica para a linha de código referente a caixa de texto txtFim:
<a href="javascript:;" onclick="window.open('calendario.aspx?textbox=txtFim','cal','width=250,height=225,left=270,top=180')">
<img src="calendario.gif" border="0" width="16" height="16"></a>
Só falta eu mostrar o código do arquivo calendario.aspx que irá abrir o calendário para que o usuário escolha uma data. Abaixo temos o código em questão :
<%@ Page Language="VB" %> <script runat="server"> Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load control.Value = Request.QueryString("textbox").ToString() End Sub Protected Sub Muda_Data(sender As System.Object, e As System.EventArgs) Dim strScript As String = "<script>window.opener.document.forms(0)." + control.Value + ".value = '" strScript += calData.SelectedDate.ToString() strScript += "';self.close()" strScript += "</" + "script>" RegisterClientScriptBlock("ok", strScript) End Sub </script> <html> <head> <title>Calendário</title> </head> <body> <form id="Form1" method="post" runat="server"> <asp:Calendar ID="calData" OnSelectionChanged="Muda_Data" Runat="server" /> <input type="hidden" id="control" runat="server" /> </form> </body> </html
|
Vejamos como funciona o código em questão :
No formulário estou definindo um objeto calendar com o nome : CalcData no qual defini que o evento OnSelectionChanged irá disparar a rotina Muda_Data:
<asp:Calendar ID="calDate" OnSelectionChanged="Muda_Date" Runat="server" />
A função Muda_Data que será disparada quando o evento OnSelectionChanged ocorrer (quando houver mudança de datas selecionadas) define o String que irá conter um script a ser executado com o conteúdo da seleção feita pelo usuário e passado para a caixa de texto pertinente:
Dim strScript As String = "<script>window.opener.document.forms(0)." + control.Value + ".value = '"
strScript += calData.SelectedDate.ToString()
strScript += "';self.close()"
strScript += "</" + "script>"
Imagine como seria fazer isto com ASP e Javascript ???
Pegue o código completo aqui e bom serviço ...
José Carlos Macoratti