You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置DateEdit默认日期为DateTime.Now不生效的解决方法

问题说明

给DateEdit日期选择器设置默认日期时,仅能通过控件查找的方式访问对应实例,按如下代码编写后,无法成功修改原始DateEdit控件的日期取值:

GridViewToolbarItem dateEditItem = toolbar.Items.FindByName("ASPxDateEditItem");
ASPxDateEdit dayDate = dateEditItem.FindControl("deDateFrom") as ASPxDateEdit;
dayDate.Date = DateTime.Now;
失效原因
  • 代码执行时机错误:工具栏内嵌的嵌套控件不会在页面初始化早期完成实例挂载,在页面Init阶段及之前通过FindControl拿到的实例,要么是未接入页面控件树的临时对象,要么赋值后会被控件自身的视图状态加载逻辑覆盖。
  • 属性使用错误:DevExpress的ASPxDateEdit控件在工具栏模板场景下,仅给Date属性赋值不会同步控件的实际提交值,后续取值时会读取旧的Value属性值,表现为赋值不生效。
正确实现方法
  • 把控件查找和赋值逻辑放到页面Load事件,或者工具栏的ItemCreated事件中执行,不要在初始化阶段过早调用。
  • 首次加载页面时(非回发状态)同时给Value和Date属性赋值,避免回发时覆盖用户手动选择的日期,参考代码:
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        GridViewToolbarItem dateEditItem = toolbar.Items.FindByName("ASPxDateEditItem");
        ASPxDateEdit dayDate = dateEditItem.FindControl("deDateFrom") as ASPxDateEdit;
        if (dayDate != null)
        {
            DateTime targetDefaultDate = DateTime.Now;
            dayDate.Value = targetDefaultDate;
            dayDate.Date = targetDefaultDate;
        }
    }
}
  • 如果直接从工具栏项层级找不到控件,说明目标控件放在工具栏项的模板容器内,直接在工具栏的ItemCreated事件里查找赋值即可:
protected void Grid_ToolbarItemCreated(object sender, GridViewToolbarItemEventArgs e)
{
    if (e.Item.Name == "ASPxDateEditItem" && !IsPostBack)
    {
        ASPxDateEdit dayDate = e.Item.FindControl("deDateFrom") as ASPxDateEdit;
        if (dayDate != null)
        {
            dayDate.Value = DateTime.Now;
        }
    }
}

注意:必须添加!IsPostBack判断,否则每次页面回发都会重置日期为当前时间,用户手动选择的日期会被强制覆盖。

内容的提问来源于stack exchange,提问作者bags

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:24:40