PDA

View Full Version : Date range: relazione tra due datepicker


robertino_salemi
20-01-2015, 12:11
[Scusatemi, all'inizio del titolo ho dimenticato si inserire [WPF], chiedo ai moderatori di aggiornalo se possibile]

Giorno a tutti,
nella mia applicazione WPF, vorrei utilizzare due datepicker per permettere all'utente di selezionare un range temporale.

Vorrei che, quando l'utente selezione una data nel 1° datepicker, automaticamente venga aggiornato il 2° datepicker in particolare:
1) il focus venga messo sulla giorno del 1° datepicker + 1
2) vengono disabilitati tutti i giorni precedenti a quelli selezionati sul 1° datepicker.

Il funzionamento dovrebbe essere identico a quello presente in un qualunque sistema di booking presente online.

Come posso gestirlo?

Grazie.

[Kendall]
20-01-2015, 14:36
Come consiglio generale ti suggerisco di dare sempre un'occhiata alla documentazione online come prima risorsa.
L'MSDN è uno strumento davvero completo e con una quantità di documentazione, tutorial ed esempi tra le migliori nel suo genere.

Comunque, tornando alla domanda, il DatePicker ha una serie di proprietà che fanno al tuo caso:

DisplayDateStart
DisplayDateEnd
SelectedDate

È inoltre definito un evento apposito per reagire alla variazione della data selezionata:

SelectedDateChanged

Per approfondire dai un'occhiata alla pagina (http://msdn.microsoft.com/it-it/library/system.windows.controls.datepicker%28v=vs.110%29.aspx) della documentazione.

robertino_salemi
20-01-2015, 15:32
Kendall,
grazie ai tuoi consigli ho risolto:

Questi sono i miei due datepicker:

<DatePicker Height="25" HorizontalAlignment="Left" Margin="3,12,0,0" Name="fromDatePicker" VerticalAlignment="Top" Width="115" SelectedDateChanged="fromDatePicker_SelectedDateChanged" />

<DatePicker Height="25" HorizontalAlignment="Left" Margin="-115,45,0,0" Name="toDatePicker" VerticalAlignment="Top" Width="115" />


qui la funziona che scatta sul change:

private void fromDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
var fromPicker = sender as DatePicker;

DateTime? data = fromPicker.SelectedDate;

if (data != null)
{
toDatePicker.SelectedDate = data;
toDatePicker.DisplayDateStart = data;
}

}


Grazie! ;)

[Kendall]
20-01-2015, 15:45
Kendall,
grazie ai tuoi consigli ho risolto:

Questi sono i miei due datepicker:

<DatePicker Height="25" HorizontalAlignment="Left" Margin="3,12,0,0" Name="fromDatePicker" VerticalAlignment="Top" Width="115" SelectedDateChanged="fromDatePicker_SelectedDateChanged" />

<DatePicker Height="25" HorizontalAlignment="Left" Margin="-115,45,0,0" Name="toDatePicker" VerticalAlignment="Top" Width="115" />


qui la funziona che scatta sul change:

private void fromDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
var fromPicker = sender as DatePicker;

DateTime? data = fromPicker.SelectedDate;

if (data != null)
{
toDatePicker.SelectedDate = data;
toDatePicker.DisplayDateStart = data;
}

}


Grazie! ;)

De nada, siamo qui per questo ;-)

Solo una annotazione. Nel primo post dicevi che la data selezionata nel secondo picker doveva essere (giustamente) quella successiva a quella selezionata nel primo. Nel metodo che hai scritto invece la fai puntare al medesimo giorno.

robertino_salemi
20-01-2015, 15:56
Si, hai ragione, grazie per l'attenzione.


/* DatePicker */
private void fromDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
var fromPicker = sender as DatePicker;

DateTime? data = fromPicker.SelectedDate;

if (data != null)
{
toDatePicker.SelectedDate = data.Value.AddDays(1);
toDatePicker.DisplayDateStart = data.Value.AddDays(1);
}

}