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);
}
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.