如果我在 dtpWeek1 中选择 8/6/2012,我希望下面的代码将 dtpWeek2 移动到 8/13,将 dtpWeek3 移动到 8/20,等等。
但是,无论我在 dtp1 中选择什么,它都会将 dtp2 移动到该月的第一天之后的一周(IOW,它始终是 8 号)。其余的 DatePickers(从 dtp3 到 dtp9)工作正常,因为它们比前一个多一周 - 但不是基于我在 dtp1 中选择的内容,因为它们始终是第 15、22 和29 日(大多数二月除外)。
就好像当我移到另一个月份时 DisplayDate 更改为 /1/ (这并非完全不合逻辑/令人惊讶),但是当我然后单击该月内的特定日期(例如 6 日)时,它会忽略它。
我使用了错误的事件吗?方法论错误?
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);
}
此外,以编程方式分配其 DisplayDate 的所有 DatePicker 组件继续显示“选择日期” - 基于属性名称 (DisplayDate),我希望它们实际显示它们的 DisplayDate。他们为什么不呢?我怎样才能让他们真正这样做?如果我单击它们将它们放下,我会看到上面描述的日期(8 日、15 日等),但他们为什么要这样隐藏他们的“光”呢?
最后,附带说明一下,以这种方式编写代码的后果是什么(我认为这可能会更慢甚至不可靠):
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);
}
将代码更改为:
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);
解决了日期不显示的问题。但是,他们仍然表现得好像我选择了 8/1 而不是 8/6。这些值为:
8/6
8/8
8/15
8/22
8/29
etc.