重写DEV的DateEdit控件的类只选择年月

  最新在做CRM的报表,查询条件只需要年月,DateEdit 以及几个时间控件都用的不顺,强迫症犯了一怒之下起了重写DateEdit的想法

新建一个类

  CXDateEdit

using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Calendar;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Popup;
using DevExpress.XtraEditors.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MLTY.Business.Report
{
   public class CXDateEdit : DateEdit
    {
        public CXDateEdit()
        {
            Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True;
            Properties.DisplayFormat.FormatString = "yyyy-MM";
            Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
            Properties.Mask.EditMask = "yyyy-MM";
            Properties.ShowToday = false;
        }

        protected override PopupBaseForm CreatePopupForm()

        {

            if (Properties.VistaDisplayMode == DevExpress.Utils.DefaultBoolean.True)

                return new CustomVistaPopupDateEditForm(this);

            return new PopupDateEditForm(this);

        }

        private DateResultModeEnum _dateMode = DateResultModeEnum.FirstDayOfMonth;

        public DateResultModeEnum DateMode

        {

            get { return _dateMode; }

            set { _dateMode = value; }

        }

        public enum DateResultModeEnum : int

        {

            //虽然是年月控件,但日期Datetime肯定是2012-01-01这种格式

            //所以,这个枚举定义了年月控件返回本月的第一天,还是本月的最后一天作为DateEditEx的值

            FirstDayOfMonth = 1,

            LastDayOfMonth = 2

        } 

    }

    public class CustomVistaPopupDateEditForm : VistaPopupDateEditForm

    {

        public CustomVistaPopupDateEditForm(DateEdit ownerEdit) : base(ownerEdit) { }

        protected override DateEditCalendar CreateCalendar()

        {

            return new CustomVistaDateEditCalendar(OwnerEdit.Properties, OwnerEdit.EditValue);

        }

    }

    public class CustomVistaDateEditCalendar : VistaDateEditCalendar

    {

        public CustomVistaDateEditCalendar(RepositoryItemDateEdit item, object editDate) : base(item, editDate) { }

        protected override void Init()

        {

            base.Init();

            this.View = DateEditCalendarViewType.YearInfo;

        }

        public CXDateEdit.DateResultModeEnum DateMode

        {

            get { return ((CXDateEdit)this.Properties.OwnerEdit).DateMode; }

        }

        protected override void OnItemClick(DevExpress.XtraEditors.Calendar.CalendarHitInfo hitInfo)

        {

            DayNumberCellInfo cell = hitInfo.HitObject as DayNumberCellInfo;

            if (View == DateEditCalendarViewType.YearInfo)

            {

                DateTime dt = new DateTime(DateTime.Year, cell.Date.Month, 1, 0, 0, 0);

                if (DateMode == CXDateEdit.DateResultModeEnum.FirstDayOfMonth)

                {

                    OnDateTimeCommit(dt, false);

                }

                else

                {

                    DateTime tempDate = dt.AddMonths(1).AddDays(-1);

                    tempDate = new DateTime(tempDate.Year, tempDate.Month, tempDate.Day, 23, 59, 59);

                    OnDateTimeCommit(tempDate, false);

                }

            }

            else

                base.OnItemClick(hitInfo);

        }

    }

}

  然后在窗体xxx上拖一个dateedit ,进入xxx.Designer.cs 将设计器代码 this.dateedit =new DevExpress.XtraEditors.DateEdit();

改成 重写的类

原博地址:http://www.cnblogs.com/axing/p/3201066.html

时间: 2024-11-10 17:00:50

重写DEV的DateEdit控件的类只选择年月的相关文章

JQuery EasyUI 日期控件 怎样做到只显示年月,而不显示日

标题问题的答案在OSChina中 http://www.oschina.net/question/2282354_224401?fromerr=lHJTcN89 我还是把这个记录下来 ================================================================= <input id="dlgReleaseTime" class="easyui-datebox"></input> $('#dl

.Net常用技巧_树控件工具类

using System; using System.Collections.Generic; using System.Text; using System.Collections; using DevComponents.AdvTree; namespace MyUtility { /// <summary> /// 树控件工具类 /// </summary> public class TreeTool { ArrayList selectArray = new ArrayLi

C#:TextBox控件操作类

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 using System; using System.Collecti

Devexpress DateEdit控件的值不反馈到数据源的处理方式。

如果在GridControl中要把编辑的值反馈到数据源,可以用Gridview1.PostEdit()方法. 可是在datalayout中使用就会遇到一些问题:比如说DateEdit控件,在保存数据的时候如果鼠标没有移开该控件时,该控件的值反馈到数据源是空的. 按照习惯在提交数据的时候应该调用数据源的EndEdit()方法,这样会促datalayout控件反馈数据到数据源上,但是遗憾的是对于DateEdit控件无无济于事. 经过摸索,调用这个方法可以解决. this.dataLayoutCont

背水一战 Windows 10 (74) - 控件(控件基类): UIElement - 与 CanDrag 相关的事件, 与 AllowDrop 相关的事件

原文:背水一战 Windows 10 (74) - 控件(控件基类): UIElement - 与 CanDrag 相关的事件, 与 AllowDrop 相关的事件 [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(控件基类 - UIElement) 与 CanDrag 相关的事件(DragStartingEventArgs, DropCompletedEventArgs) 与 AllowDrop 相关的事件(DragEventArgs) 示例1.演示 UIEle

背水一战 Windows 10 (73) - 控件(控件基类): UIElement - 拖放的基本应用, 手动开启 UIElement 的拖放操作

原文:背水一战 Windows 10 (73) - 控件(控件基类): UIElement - 拖放的基本应用, 手动开启 UIElement 的拖放操作 [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(控件基类 - UIElement) 拖放的基本应用 手动开启 UIElement 的拖放操作 示例1.演示 UIElement 的 drag & drop 的基本应用Controls/BaseControl/UIElementDemo/DragDropDemo1

背水一战 Windows 10 (77) - 控件(控件基类): ContentControl, UserControl, Page

原文:背水一战 Windows 10 (77) - 控件(控件基类): ContentControl, UserControl, Page [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(控件基类 - ContentControl, UserControl, Page) ContentPresenter ContentControl UserControl Page 示例1.演示 ContentPresenter 的基础知识Controls/BaseContro

DEV 之 有些控件不允许拖动。

DEV 之 有些控件不允许拖动.  设置一个参数即可解决问题 原文地址:https://www.cnblogs.com/struggle-cs/p/9935939.html

Atitit.ui控件---下拉菜单选择控件的实现select html

Atitit.ui控件---下拉菜单选择控件的实现select   html 1. 调用& model的实现 1 2. -----select.jsp------ 1 1. 调用& model的实现 Proj.vod2 <% List li=new ArrayList(); Map m=new HashMap (); m.put("lab","爱情"); m.put("v","1"); li.add(m)