I would expect that my code below would, in the event I selected 8/6/2012 in dtpWeek1, move dtpWeek2 to 8/13, dtpWeek3 to 8/20, etc.
However, no matter what I select in dtp1, it moves dtp2 to one week past the first of the month (IOW, it’s always the 8th). The rest of the DatePickers (from dtp3 through dtp9) work fine, in that they are one week beyond the previous one – but are not what they should be based on what I selected in dtp1, as they are always the 15th, 22nd, and 29th (except in most Februarys).
It’s as if when I move to another month DisplayDate changes to /1/ (which is not entirely illogical/surprising), but when I then click on a specific date within that month (such as the 6th), it disregards it.
Am I using the wrong event? The wrong methodology?
private void dtpWeek1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
dtpWeek2.DisplayDate = dtpWeek1.DisplayDate.AddDays(7);
dtpWeek3.DisplayDate = dtpWeek1.DisplayDate.AddDays(14);
dtpWeek4.DisplayDate = dtpWeek1.DisplayDate.AddDays(21);
dtpWeek5.DisplayDate = dtpWeek1.DisplayDate.AddDays(28);
dtpWeek6.DisplayDate = dtpWeek1.DisplayDate.AddDays(35);
dtpWeek7.DisplayDate = dtpWeek1.DisplayDate.AddDays(42);
dtpWeek8.DisplayDate = dtpWeek1.DisplayDate.AddDays(49);
// TODO: Only add week 9 if it is within the month following the first month
dtpWeek9.DisplayDate = dtpWeek1.DisplayDate.AddDays(56);
}
Additionally, all of the DatePicker components that have their DisplayDates programmatically assigned continue to display “Select a date” – based on the property name (DisplayDate), I would expect them to actually display their DisplayDate. Why don’t they? How can I get them to actually do so? If I click them to drop them down, I see there date is as described above (the 8th, 15th, etc.) but why are they hiding their “light” that way?
Finally, on a side note, what would be the ramifications of writing the code this way instead (I’m thinking this might be slower or even unreliable):
private void dtpWeek1_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
dtpWeek2.DisplayDate = dtpWeek1.DisplayDate.AddDays(7);
dtpWeek3.DisplayDate = dtpWeek2.DisplayDate.AddDays(7);
dtpWeek4.DisplayDate = dtpWeek3.DisplayDate.AddDays(7);
dtpWeek5.DisplayDate = dtpWeek4.DisplayDate.AddDays(7);
dtpWeek6.DisplayDate = dtpWeek5.DisplayDate.AddDays(7);
dtpWeek7.DisplayDate = dtpWeek6.DisplayDate.AddDays(7);
dtpWeek8.DisplayDate = dtpWeek7.DisplayDate.AddDays(7);
dtpWeek9.DisplayDate = dtpWeek8.DisplayDate.AddDays(7);
}
Changing the code to this:
dtpWeek2.SelectedDate = dtpWeek1.DisplayDate.AddDays(7);
dtpWeek3.SelectedDate = dtpWeek1.DisplayDate.AddDays(14);
dtpWeek4.SelectedDate = dtpWeek1.DisplayDate.AddDays(21);
dtpWeek5.SelectedDate = dtpWeek1.DisplayDate.AddDays(28);
dtpWeek6.SelectedDate = dtpWeek1.DisplayDate.AddDays(35);
dtpWeek7.SelectedDate = dtpWeek1.DisplayDate.AddDays(42);
dtpWeek8.SelectedDate = dtpWeek1.DisplayDate.AddDays(49);
dtpWeek9.SelectedDate = dtpWeek1.DisplayDate.AddDays(56);
Solved the problem with the dates not displaying. However, they still act as if I selected 8/1 instead of 8/6. The values are:
8/6
8/8
8/15
8/22
8/29
etc.
Ok, to turn the comments into an answer: The
SelectedDateproperty should be used like this:SelectedDateis aDateTime?(nullable) hence the.Valueon the right hand side.