0

如果我在 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.
4

1 回答 1

1

好的,将评论变成答案:该SelectedDate属性应该像这样使用:

dtpWeek2.SelectedDate = dtpWeek1.SelectedDate.Value.AddDays(7);

SelectedDateDateTime?(可为空的),因此.Value在右侧。

于 2012-07-09T21:36:00.550 回答