¿Cómo obtener fecha especifica entre un rango de fechas? C#

publicado por: Anonymous

Tengo dos DateTimePicker para obtener un rango de fechas, y un GroupBox que contiene CheckBoxs para identificar los días de la semana.

introducir la descripción de la imagen aquí

Pretendo Recorrer el rango de fechas y solo realizar la operación deseada cuando la fecha del rango pertenezca a las opciones de los CheckBox seleccionados, como se muestra en mi imagen, del rango de fecha seleccionado solo deseo ejecutar una acción cuando la fecha del rango sea Lunes, Miércoles, Viernes o los dias que seleccione el usuario.

Algo como esto:

DateTime fecha_inicio = DateTime.Parse(fecha_desde.Value.ToString()); 
DateTime fecha_fin = DateTime.Parse(fecha_hasta.Value.ToString()); 

for (DateTime fecha = fecha_inicio; fecha <= fecha_fin; fecha = fecha.AddDays(1))
{
     //Aqui preguntar si la fecha pertenece a uno de los dias seleccionados 
     //if(fecha ...)
     //{
          //Ejecutar la acción.....
     //}
}

Con esto poder identificar los CheckBox Checked == True:

foreach (Control control in groupBox1.Controls)
{
      if (control is CheckBox)
          if (( (CheckBox)control ).Checked && ( (CheckBox)control ).Text != "Seleccionar Todos")
            //Asignar algun valor para identificar cada dia...
}

¿Cómo puedo lograr esto?

Entorno: Visual Studio 2010, C# & .NET Netframework 4.

solución

En la propiedad Tag de cada Checkbox, le asignale el numero del dia correspondiente al Checkbox. Por ejemplo el domingo tendrá el valor de 0, el lunes tendrá el valor 1, martes el valor de 2 y etc., etc hasta llegar al sabado que es 6. Esto lo puedes asignar, buscando dando clic derecho sobre el Checkbox->Propiedades y buscas por Tag.

Luego crea un evento change que se ejecutara cuando se seleccione/desseleccione el checkbox. Le asignaras el mismo metodo a todos los checkbox. Este lo que hara es que si selecionas un checkbox, guardaras el valor del Tag que contiene el dia en una lista, si ya existe en la lista, lo eliminas.

List<int> diasSeleccionados = new List<int>();
public void diaSeleccionado_Changed(object sender, EventArgs e){

    var dia = Convert.ToInt32((sender as Checkbox).Tag);

    // verificamos si existe el dia en checkbox
    if(diasSeleccionados.Contains(dia))
    {
        diasSeleccionados.Remove(dia);
    }
    else{
        // lo agregamos ya que no fue seleccionado
        diasSeleccionados.Add(dia);
    }
}

Entonces como ya sabes cuales dias fueron selecionado, solo tendiras que buscar si el dia de la fecha que esta en el checkbox esta presente en la lista diasSeleccionados:

DateTime fecha_inicio = DateTime.Parse(fecha_desde.Value.ToString()); 
DateTime fecha_fin = DateTime.Parse(fecha_hasta.Value.ToString()); 

for (DateTime fecha = fecha_inicio; fecha <= fecha_fin; fecha = fecha.AddDays(1))
{
     // verificamos el dia esta en el array
     if(diasSeleccionados.Contains((int)fecha.DayOfWeek))
     {
        // el dia esta seleccionado
     }
}

Nota: Los valores que le son asignados a los tag, representa los valores del Enum DayOfWeek.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *