我正在WinForms中实现搜索功能,我按日期范围搜索。因此,表单上有dateForm和dateTo日期选择器。默认情况下,它们的值是日期时间now(),如果用户根本没有触及日期时间选择器,他将无法获得任何结果。因为搜索将在now()和now()之间执行,所以如果我将min和max值设置为默认值,它将解决第一个问题但如果用户想要按日期范围搜索会有另一个问题,他需要点击许多时间从默认1700(某事)到现在()
有任何解决此问题的建议吗?
非常感谢。
答案 0 :(得分:2)
答案 1 :(得分:2)
你不能拥有一个带有开箱即用控件的无价值的日期选择器。为什么?它由DateTime支持,它是不可为空的。
您可以使用其他控件禁用它,或者在用户点击之前将其禁用(键盘爱好者的不良用户体验,例如我自己),或查找或创建使用Nullable<DateTime>
的(!)。
回应你的评论,是的,你可以这样做;事实上,我已经做到了。
ValueChanged
事件中,将flag的值设置为false ValueChanged
事件中,将from
和to
字段设置为dtps的值(当dtp更改时,您必须同时设置这两个字段,因为用户将看到另一个设置为今天,但搜索值仍然是最小或最大)。问题在于,一旦用户更改了日期选择,她就不能轻易回到“所有日期”。此外,用户无法在未先更改其中一个日期然后再将其更改的情况下选择“仅限今天”。
我认为最适合您的方法是使用一个复选框“按日期范围搜索”,该复选框可以启用另外禁用的两个dtps,也可以显示隐藏的dtps。然后,除非选中复选框,否则从最小值到最大值进行搜索,当选中复选框 时,无论它们是什么,都使用两个dtp日期。不要忘记处理to
和from
不正常,这可以通过多种方式完成。
答案 2 :(得分:1)
选中每个日期时间选择器旁边的复选框,然后使用复选框启用/禁用日期时间选择器。
因此,如果禁用datetimepicker,您就知道用户不想指定日期时间。
答案 3 :(得分:0)
DateTimePicker具有ShowCheckBox属性,该属性“确定控件中是否显示复选框。如果未选中此框,则不会选择任何值。”
我使用了类似以下内容的日期范围选择器,它们可以为空。一位用户告诉我,起初,她不知道复选框的用途是什么,但是在使用了几次之后她自己想出来了。
public DateTime? EndDate
{
get
{
DateTime? returnValue = null;
if (endDateDateTimePicker.Checked)
{
returnValue = endDateDateTimePicker.Value;
}
return returnValue;
}
set
{
if (value.HasValue)
{
endDateDateTimePicker.Checked = true;
endDateDateTimePicker.Value = value.Value;
}
else
{
endDateDateTimePicker.Checked = false;
}
}
}
答案 4 :(得分:0)
您可以将DateDateTimePicker.format属性设置为custom。然后在DateDateTimePicker.customformat属性下,您可以设置默认文本,例如&#34; N / A&#34;或者是一个sapce&#34; &#34 ;. 用户选择了某个日期值后,您应该将format属性设置为short等。
http://i.stack.imgur.com/Z1QB5.png
希望这有帮助!