Universo do Conhecimento
“Comece fazendo o que é necessário, depois o que é possível e, de repente, você estará fazendo o impossível.”
"Ninguém pode voltar atrás e fazer um novo começo mas qualquer um pode começar agora e fazer um novo fim."


 Downloads Mapa do Site 2 visitantes on-line 

 Login
   
    
 Lembrar de mim
Registro
Esqueceu sua senha?

 Home
 :: Home

 Desenvolvimento
 :: ADO
 :: ASP
 :: C#
 :: HTML
 :: JAVA SCRIPT
 :: VB.Net

 Banco de Dados
 :: SQL SERVER

 Interação
 :: Anuncie
 :: Fale conosco

 Serviços
 :: Contratos

 Diversão
 :: Jogos

 Colunas
 :: ARTIGOS

 Enquete
Qual a sua linguagem preferida ?
35% ASP (VbScript)
14% PHP
8% JSP
10% VB.Net
33% C#

 Buscar no site
  

 CERTIFICAÇÃO
LINKS

 
 Home
 Controle Calendar e Banco de Dados
Aprenda a manipular registros vindo de uma base de dados com o controle calendar.

Muitas vezes armazenamos em um banco de dados informações com dados e seus respectivos acontecimentos. Existem vários exemplos disso em nosso dia à dia: Eventos que serão realizados em uma determinada data e também um outro exemplo bem conhecido é o de Agendas, onde armazenamos na base de dados os compromissos/anotações para aquela respectiva data.

Nestes cenários o que se utiliza bastante é o controle Calendar, qual é disponibilizado pelo ASP.NET já intrinsicamente. Para o cenário de exemplo, vamos ter uma tabela que armazena os eventos de tecnologia de uma determinada região. Apenas para ilustrar, eu estarei criando um objeto do tipo DataTable para armazenar estes eventos. Em um cenário real, esses dados devem se originar de uma base de dados (ou um outro repositório qualquer), armazenar temporariamente em um objeto do tipo DataTable e, através do evento DayRender do controle Calendar, que é disparado a cada Data (dia) que será renderizado na tela, efetuamos a consulta para aquela data no objeto DataTable temporário e, se existir, atribuimos a célula correspondente o nome do evento.
    
É importante ressalvar que, não se deve ir a todo momento fazer a pesquisa diretamente na base de dados, em outras palavras, efetuar essa pesquisa no evento DayRender, pois isso comprometerá a performance da página/aplicação.

Para alcançarmos o objetivo, devemos criar um membro privado do tipo DataTable, que este armazenará os dados temporariamente provenientes da base dados. Vejamos abaixo o código completo:



C#

private DataTable _dtEventos;

private void Page_Load(object sender, System.EventArgs e)
{
    if(!Page.IsPostBack)
        this.ResgataDados();
}

private void ResgataDados(){
    this._dtEventos = new DataTable();

    this._dtEventos.Columns.Add(new DataColumn("Nome", typeof(String)));
    this._dtEventos.Columns.Add(new DataColumn("Data", typeof(DateTime)));

    DataRow evento1 = this._dtEventos.NewRow();
    evento1[0] = "Evento Microsoft";
    evento1[1] = "19/10/2005";
    this._dtEventos.Rows.Add(evento1);

    DataRow evento2 = this._dtEventos.NewRow();
    evento2[0] = "Evento Linha de Código";
    evento2[1] = "25/10/2005";
    this._dtEventos.Rows.Add(evento2);
}

private void Calendar1_DayRender(
    object sender,
    System.Web.UI.WebControls.DayRenderEventArgs e)
{
    string query = string.Concat("Data = #", e.Day.Date.ToString("MM/dd/yyyy"), "#");
    DataRow[] dr = this._dtEventos.Select(query);
    if(dr.Length > 0)
        e.Cell.Text = Convert.ToString(dr[0][0]);
}

VB.net

Private _dtEventos As DataTable

Private Sub Page_Load( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles MyBase.Load

    If Not Page.IsPostBack Then
        Call Me.ResgataDados()
    End If
End Sub

Private Sub ResgataDados()
    Me._dtEventos = New DataTable
    Me._dtEventos.Columns.Add(New DataColumn("Nome", GetType(String)))
    Me._dtEventos.Columns.Add(New DataColumn("Data", GetType(DateTime)))

    Dim evento1 As DataRow = Me._dtEventos.NewRow()
    evento1(0) = "Evento Microsoft"
    evento1(1) = "19/10/2005"
    Me._dtEventos.Rows.Add(evento1)

    Dim evento2 As DataRow = Me._dtEventos.NewRow()
    evento2(0) = "Evento Linha de Código"
    evento2(1) = "25/10/2005"
    Me._dtEventos.Rows.Add(evento2)
End Sub

Private Sub Calendar1_DayRender( _
    ByVal sender As Object, _
    ByVal e As System.Web.UI.WebControls.DayRenderEventArgs) _
    Handles Calendar1.DayRender

    Dim query As String = String.Concat("Data = #", e.Day.Date.ToString("MM/dd/yyyy"), "#")
    Dim dr() As DataRow = Me._dtEventos.Select(query)
    If dr.Length > 0 Then
        e.Cell.Text = Convert.ToString(dr(0)(0))
    End If
End Sub
 
Como podemos ver, no evento Load do WebForm e instanciamos e criamos a estrutura do objeto DataTable que é membro desta página. Para o exemplo, duas colunas estão sendo criadas: Nome do evento e a Data em que o evento irá acontecer. Logo em seguida, dois objetos do tipo DataRow são criados. quais representarão os registros de uma base de dados e, consequentemente são adicionados na coleção de linhas do objeto DataTable.

Como o evento DayRender do controle Calendar acontece depois do evento Load do WebForm, quando o mesmo for invocado, já teremos o objeto DataTable populado com os dados da base de dados e, é exatamente neste momento que a consulta deverá ser realizada para exibir ou não o nome do evento para o usuário, caso a consulta resulte em algum registro. Como já disse acima, o evento DayRender é disparado para cada data (dia) que será mostrada pelo calendário e, neste mesmo evento, recebemos como parâmetro um objeto do tipo DayRenderEventArgs que fornece toda a infraestrura para manipularmos a célula (dia) corrente.

Através do método Select do DataTable fazemos a consulta na coluna "Data" do membro DataTable, passando como parâmetro o dia corrente e, se existir um evento para esta data que está sendo consultada, definimos o nome deste evento para ser exibido ao usuário.

[02/04/2007 10:03 - Fabrizio Gianfratti]

 Imprimir Enviar para um amigo Dê sua opinião

 
 BUSCAR NO SITE
Busca :

 WebMail
Email :
Senha :
 
TRADUTOR ONLINE

 Fabrizio Gianfratti

Fabrizio Gianfratti - Clique para visualizar

 Artigos + recentes
Dicas para programar melhor
04/10/2007
Listar drivers da maquina do cliente
04/01/2007
Carro no Labirinto
10/11/2006
Dangerous Dave
10/11/2006
Calculadoras financeiras
24/10/2006
Função que cria Array(Vetor) automaticamente
16/09/2005
JavaScript - Funções de arrays
06/09/2005
JavaScript - Funções matemáticas
06/09/2005
Trabalhando com Cursores no SQL SERVER
31/05/2005
Joguinho da velha
02/02/2005

 Top Páginas
 :: ASP
 :: Home
 :: JAVA SCRIPT
 :: SQL SERVER
 :: ARTIGOS

 Downloads
 :: Icones Web - 4.800 imagens de Icones (15444)
 :: Pague com atraso (533)
 :: Source Edit (358)
 :: Outlook Express Minimizado (305)
 :: Color Cop (300)

 Arquivo
 :: Dicas para programar melhor 
 :: Calculadoras financeiras 
 :: Função que cria Array(Vetor) automaticamente 
 :: JavaScript - Funções de arrays  

Gianfratti.com - All right reserved