Cómo: Responder a la selección de fecha en un control Calendar de servidor Web

Actualización: noviembre 2007

Si la propiedad SelectionMode del control Calendar se establece en un valor diferente de None, el usuario puede seleccionar un día o un intervalo de fechas. Puede detectar la elección del usuario y responder a ella.

Para responder a una selección de fecha

  • Cree un método para el evento SelectionChanged del control Calendar con la firma siguiente:

    Private Sub Calendar1_SelectionChanged(ByVal sender _
        As System.Object, ByVal e As System.EventArgs) _
        Handles Calendar1.SelectionChanged
    
    private void Calendar1_SelectionChanged (object sender, 
        System.EventArgs e)
    
    Nota:

    El evento sólo se desencadena si el usuario realiza una acción en el control para cambiar la fecha seleccionada. Por ejemplo, si el usuario hace clic dos veces en la misma fecha, el segundo clic no produce ningún evento. El evento tampoco se produce si se establece un intervalo de fechas mediante programación.

La información relativa a la selección de fecha se encuentra disponible en estas propiedades:

Propiedad

Descripción

SelectedDate

Fecha única. Si el usuario seleccionó una fecha única, esta propiedad contiene esta fecha. Si el usuario seleccionó varias fechas, esta propiedad contiene la primera fecha del intervalo.

SelectedDates

Colección que contiene todas las fechas seleccionadas. Las fechas de esta colección están ordenadas y son únicas. Dado que el control Calendar no permite que el usuario seleccione varias fechas individuales, las fechas de la colección son además consecutivas.

Para determinar cuántas fechas están seleccionadas

  • Obtenga el valor de la propiedad Count de la colección SelectedDates, tal y como se muestra en el ejemplo siguiente.

    Public Sub Calendar1_SelectionChanged(ByVal sender As Object, _
       ByVal e As System.EventArgs) _
       Handles Calendar1.SelectionChanged
    
       Text1.Text = "You selected " _
          & Calendar1.SelectedDates.Count.ToString() _
          & " date(s)."
    End Sub
    
    private void Calendar1_SelectionChanged (object sender, System.EventArgs e)
    {
       Text1.Text = String.Format("You selected {0} date(s).",
          Calendar1.SelectedDates.Count);
    }   
    

Si determinó que el usuario seleccionó varias fechas, puede obtener el intervalo.

Para obtener el intervalo de fechas de una selección de varias fechas

  1. Obtenga el número de fechas seleccionadas mediante la propiedad Count de la propiedad SelectedDates.

  2. Obtenga la primera fecha de la colección y, a continuación, obtenga la última fecha extrayendo la fecha en el índice del recuento menos uno. En el ejemplo siguiente se muestran la primera y la última fecha en controles de cuadro de texto de la página.

    Public Sub Calendar1_SelectionChanged(ByVal sender As Object, _
       ByVal e As System.EventArgs) _
       Handles Calendar1.SelectionChanged
    
       With Calendar1.SelectedDates
          If .Count > 1 Then
             Dim firstDate As Date = .Item(0).Date
             Dim lastDate As Date = .Item(.Count - 1).Date
             TextBox1.Text = firstDate.ToString()
             TextBox2.Text = lastDate.ToString()
          End If
       End With
    End Sub
    
    private void Calendar1_SelectionChanged (object sender,
       System.EventArgs e)
    {
       SelectedDatesCollection theDates = Calendar1.SelectedDates;
       if (theDates.Count > 1) 
       {
          DateTime firstDate = theDates[0];
          DateTime lastDate = theDates[theDates.Count-1];
          TextBox1.Text = firstDate.ToString();
          TextBox2.Text = lastDate.ToString();
       }
    }
    

Para obtener el intervalo de tiempo de una selección de varias fechas

  • Cree un objeto TimeSpan y establézcalo en la diferencia entre la primera y la última fecha de la colección SelectedDates; a continuación, obtenga la propiedad Days del objeto TimeSpan.

    Public Sub Calendar1_SelectionChanged(ByVal sender As Object, _
       ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
       With Calendar1.SelectedDates
          Dim days As Integer
          Dim firstDate As Date = .Item(0).Date
          Dim lastDate As Date = .Item(.Count - 1).Date
          ' The Subtract method returns a TimeSpan object.
          days = lastDate.Subtract(firstDate).Days + 1
          TextBox1.Text = "You have selected " & days.ToString() & " day(s)."
       End With
    End Sub
    
    private void Calendar1_SelectionChanged (object sender,
       System.EventArgs e)
    {
       SelectedDatesCollection theDates = Calendar1.SelectedDates;
       TimeSpan timeSpan = theDates[theDates.Count-1] - theDates[0];
       TextBox1.Text = 
          String.Format("You have selected {0} day(s).", timeSpan.Days + 1);
    }   
    

Vea también

Tareas

Cómo: Seleccionar fechas mediante programación en un control Calendar de servidor Web

Conceptos

Información general sobre Calendar (Control de servidor Web)