Como: Personalizar dias individuais em um calendário controle de servidor Web
Por padrão, dias no controle Calendar são exibidos como números.Se a seleção de dia estiver ativada, os números aparecem como links.Para obter detalhes, consulte:Como: Controle usuário data seleção in a calendário controle de servidor Web.
Você pode personalizar a aparência e conteúdo de dias individuais, que permite que você:
Programaticamente realce determinados dias, por exemplo, mostrando feriados em uma cor diferente.
Programaticamente especifique se um dia individual pode ser selecionado.
Adicione informações na exibição do dia, como informações de compromisso ou evento.
Personalize o texto de link que os usuários podem clicar para selecionar um dia.
Quando o controle Calendar está criando a saída para enviar ao navegador, ele gera um evento DayRender.O controle gera o evento para cada dia enquanto está preparando o dia para exibição, para que você possa, em seguida, por programação, examinar qual data está sendo processada e personalizá-lo adequadamente.
The DayRender método de evento leva dois argumentos: uma referência ao controle disparar o evento (o Calendar controle) e um objeto do tipo DayRenderEventArgs. O objeto DayRenderEventArgs fornece acesso a dois objetos adicionais:
Cell, um objeto TableCell que você pode usar para definir a aparência de um dia individual.
Day, que você pode usar para consultar informações sobre o dia que está sendo processado, controlar se o dia pode ser selecionado e adicionar conteúdo a um dia.O objeto Day suporta várias propriedades que você pode usar para aprender sobre o dia (por exemplo, IsSelected, IsToday, e assim por diante).Ele também suporta uma coleção Controls que você pode manipular para adicionar conteúdo para o dia.
Para personalizar a aparência de um dia individual
Crie um método para manipular o evento DayRender do controle Calendar.
No método, defina propriedades do objeto Cell, que você pode acessar com o argumento DayRenderEventArgs.
O exemplo a seguir mostra como alterar a aparência dos dias individuais.O método faz com que dias de férias no calendário sejam processados em amarelo, enquanto dias de final semana sejam processados em verde.No exemplo, dias de férias são de 23 de novembro até 30 de novembro de 2005.
Protected Sub Calendar1_DayRender(ByVal sender As Object, _ ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender ' Display vacation dates in yellow boxes with purple borders. Dim vacationStyle As New Style() With vacationStyle .BackColor = System.Drawing.Color.Yellow .BorderColor = System.Drawing.Color.Purple .BorderWidth = New Unit(3) End With ' Display weekend dates in green boxes. Dim weekendStyle As New Style() weekendStyle.BackColor = System.Drawing.Color.Green ' Vacation is from Nov 23, 2005 to Nov 30, 2005. If ((e.Day.Date >= New Date(2005, 11, 23)) _ And (e.Day.Date <= New Date(2005, 11, 30))) Then e.Cell.ApplyStyle(vacationStyle) ElseIf (e.Day.IsWeekend) Then e.Cell.ApplyStyle(weekendStyle) End If End Sub protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { // Display vacation dates in yellow boxes with purple borders. Style vacationStyle = new Style(); vacationStyle.BackColor = System.Drawing.Color.Yellow; vacationStyle.BorderColor = System.Drawing.Color.Purple; vacationStyle.BorderWidth = 3; // Display weekend dates in green boxes. Style weekendStyle = new Style(); weekendStyle.BackColor = System.Drawing.Color.Green; if ((e.Day.Date >= new DateTime(2000,11,23)) && (e.Day.Date <= new DateTime(2000,11,30))) { // Apply the vacation style to the vacation dates. e.Cell.ApplyStyle(vacationStyle); } else if (e.Day.IsWeekend) { // Apply the weekend style to the weekend dates. e.Cell.ApplyStyle(weekendStyle); }
Para especificar que um dia individual pode ser selecionado
Em um método para o evento DayRender do controle Calendar, determine que dia está sendo processado, obtendo informações da propriedade Date do objeto Day.
Defina a propriedade IsSelectable desse dia como true.
O exemplo a seguir mostra como 0efinir a data, 1 de outubro de 2005, como selecionável; todos as outras datas são feitas não selecionáveis.
Protected Sub Calendar1_DayRender(ByVal sender As Object, _ ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender Dim myAppointment As Date = New Date(2005, 10, 1) If (e.Day.Date = myAppointment) Then e.Day.IsSelectable = True Else e.Day.IsSelectable = False End If End Sub
protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { DateTime myAppointment = new DateTime(2005, 10, 1); if (e.Day.Date == myAppointment) { e.Day.IsSelectable = true; } else { e.Day.IsSelectable = false; } }
Para adicionar conteúdo a um dia individual
Em um manipulador para o evento DayRender do controle Calendar, adicione qualquer controle HTML ou Web ASP.NET à coleção Controls do objeto Day a partir do argumento DayRenderEventArgs.
O exemplo a seguir exibe feriados.A lista de feriados é criada como uma matriz bidimensional durante carregamento da página.Descrições festivas serão carregadas nos elementos correspondente à sua data.No método do evento DayRender, cada dia é comparado com o vetor de feriados.Se o elemento correspondente do vetor de feriados contém um valor, um controle Label é criado com o texto do feriado e adicionado na coleção Controls do dia.
Dim holidays(13, 32) As String Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load holidays(1, 1) = "Birthday" holidays(2, 14) = "Anniversary" End Sub Protected Sub Calendar1_DayRender(ByVal sender As Object, _ ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender If e.Day.IsOtherMonth Then e.Cell.Controls.Clear() Else Dim aDate As Date = e.Day.Date Dim aHoliday As String = holidays(aDate.Month, aDate.Day) If (Not aHoliday Is Nothing) Then Dim aLabel As Label = New Label() aLabel.Text = "<br>" & aHoliday e.Cell.Controls.Add(aLabel) End If End If End Sub
string[,] holidays = new String[13, 32]; protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { string aHoliday; DateTime theDate = e.Day.Date; aHoliday = holidays[theDate.Month, theDate.Day]; if (aHoliday != null) { Label aLabel = new Label(); aLabel.Text = " <br>" + aHoliday; e.Cell.Controls.Add(aLabel); } } protected void Page_Load(object sender, EventArgs e) { holidays[1, 1] = "Birthday"; holidays[2, 14] = "Anniversary"; }
Para personalizar o texto de link de dias individuais
Em um método para o evento DayRender do controle Calendar, obtenha a propriedade SelectUrl do argumento DayRenderEventArgs.A propriedade SelectUrl retorna o JavaScript que normalmente é processado para esse dia a fim de causar um postback indicando a seleção da data.
Usando a concatenação, crie um hiperlink HTML que use o valor da propriedade SelectUrl como o atributo href.
Adicione o hiperlink como a propriedade Text do objeto Cell.
O exemplo a seguir exibe feriados.A lista de feriados é criada como uma matriz bidimensional durante carregamento da página.Descrições festivas serão carregadas nos elementos correspondente à sua data.No método do evento DayRender, cada dia é comparado com o vetor de feriados.Se o elemento correspondente da matriz de feriados contiver um valor, o código cria texto de link que exibe o nome do feriado em vez do número do dia.
Dim holidays(13, 32) As String Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load holidays(1, 1) = "Birthday" holidays(2, 14) = "Anniversary" End Sub Protected Sub Calendar1_DayRender(ByVal sender As Object, _ ByVal e As DayRenderEventArgs) Handles Calendar1.DayRender If e.Day.IsOtherMonth Then e.Cell.Controls.Clear() Else Dim aDate As Date = e.Day.Date Dim aHoliday As String = holidays(aDate.Month, aDate.Day) If (Not aHoliday Is Nothing) Then e.Cell.Text = _ "<a href=" & e.SelectUrl & ">" & aHoliday & "</a>" End If End If End Sub
string[,] holidays = new String[13, 32]; protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { string aHoliday; DateTime theDate = e.Day.Date; aHoliday = holidays[theDate.Month, theDate.Day]; if (aHoliday != null) { e.Cell.Text = "<a href=" + e.SelectUrl + ">" + aHoliday + "</a>"; } } protected void Page_Load(object sender, EventArgs e) { holidays[1, 1] = "Birthday"; holidays[2, 14] = "Anniversary"; }
Consulte também
Tarefas
Como: Exibir datas selecionadas de um banco de dados no controle calendário