Você está em: Principal › Tutoriais › Lanodecastro : Xml001
Agendando Datas no Calendar com XML
Hoje vamos interromper nossa seqüência de tutoriais sobre o Sistema de Notícias para tratar de um assunto bem interessante e muito produtivo, o uso do objeto Calendar.
Você pode até estar questionando, por que tão produtivo? Simples, o objeto Calendar, já traz consigo toda a estrutura visual de comportamental de um calendário interativo, isso de fato simplificou muito a vida dos programadores e prova mais uma vez que o ambiente .Net sem dúvidas, é o mais produtivo do mercado.
Certa vez, quando ainda programava em ASP, surgiu a necessidade de implementar um calendário com datas agendadas, isto é, datas destacadas no calendário, de forma que o usuário em questão pudesse distinguí-las. Imagine o trabalhão que deu, pior é que não ficou como eu pretendia sem contar as muitas vezes em que acontecia uma exceção.
Pois bem, agora estamos em outra era, e com ASP.Net vamos implementar um calendário que carrega as datas a serem marcadas de um arquivo XML.
Você pode usar o VS.Net 2003, VS.Net 2005 ou WebMatrix
Objetos: File; Calendar; Dataset
Linguagem: VB.Net (mas quem quiser o código em C# é só me mandar um e-mail)
Arquivos: Agenda.aspx e Agenda.xml
Crie um novo projeto e dê a ele o nome de AgendaXML
Lembrando que é uma ASP.Net Web Application.
Exclua o arquivo WebForm1.aspx do seu projeto e adicione um novo chamado Agenda.aspx
Abra o arquivo Agenda.aspx e adicione o controle Calendar que está na ToolBox.
Coloque o na posição que desejar, e ainda mantendo-o selecionado, clique em AutoFormat na caixa de propriedades, e selecione uma auto-formatação que lhe agrade.
Ainda na caixa de propriedades, dê a ele o nome de Calendario.
Agora, o próximo passo é criar o arquivo XML que irá conter as datas a serem agendadas no calendário.
Você pode criar este arquivo no próprio VS.Net ou em outro editor qualquer. O arquivo deverá conter a seguinte estrutura:
<Agenda_de_Compromissos>
<Compromissos>
<Descricao>Pagamento das Despesas Gerais</Descricao>
<Data>4/8/2006</Data>
</Compromissos>
</Agenda_de_Compromissos>
Você pode até copiar este modelo acima. Para cada data que você quiser agendar é necessário inserir uma nova descrição e uma nova data dentro dos Tags <Agenda_de_Compromissos></Agenda_de_Compromissos>. Este modelo acima possui apenas uma data agendada.
Salve este arquivo em qualquer lugar do seu disco rígido, de preferência no C:\Agenda.xml
Agora vamos ao código que irá carregar este arquivo e exibir as datas selecionadas no calendário.
Importe os seguintes Namespaces
Usaremos System.Data para poder manipular o arquivo XMl, e o System.IO apenas para verificar a existência do arquivo a ser carregado.
Agora iremos criar duas rotinas, uma para verificar a existência do arquivo, e outra para carregar as datas, caso o arquivo exista, é claro.
Primeira Rotina
Private Sub ObterArquivoXML()
'Cria o objeto File, para manipular arquivos
Dim arqXML As File
'Verifica a existência do arquivo no path C:\Agenda.XML
If arqXML.Exists("C:\Agenda.XML") Then
'Caso o arquivo esteja prensente, chama a rotina para carregar as datas
CarregarDatasAgendadas()
'Caso contrário, informa que o arquivo não foi encontrado e impede a visualização do calendário
Response.Write("O arquivo não foi localizado!")
Note que usamos o objeto File apenas para verificar se o arquivo existe no caminho especificado.
Agora vamos para a segunda Rotina
Private Sub CarregarDatasAgendadas()
'Cria o dataset que irá obter a tabela compromissos
Dim dsAgenda As New DataSet
'Abre o arquivo Agenda.xml e carrega para o dataset
dsAgenda.ReadXml("C:\Agenda.xml")
'variável de controle de repetição
'Cria a repetição interagindo com o número de linhas dentro da tabela compromissos
For x = 0 To dsAgenda.Tables("Compromissos").Rows.Count - 1
'A cada linha encontrada, uma nova data é adicionada no calendário.
Calendario.SelectedDates.Add(dsAgenda.Tables("Compromissos").Rows(x).Item(1))
Reparem que o código é muito simples.
Primeiramente se cria o DataSet e depois usa a função ReadXML() para carregar o arquivo. De acordo com a estrutura do arquivo Agenda.xml, uma tabela passará a existir chamada Compromissos.
Usamos a propriedade Rows.Count para saber quantas linhas foram inseridas, ou seja, quantas datas agendadas existem.
E por último, utilizamos a função SelectDates.Add() do calendário, para adicionar todas as linhas Rows(x) da tabela compromissos, adicionando as datas que estão na coluna dois Rows(x).Item(1). O número 1 indica a segunda coluna, sendo Rows.Item(0) a primeira coluna.