• [原] XAF 添加日期筛选下拉选择


     1.ListView 添加日期筛选下拉选择,选择指定,可指定日期范围

    2.Code

    using DevExpress.Data.Filtering;
    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.Actions;
    using DevExpress.ExpressApp.DC;
    using DevExpress.ExpressApp.Editors;
    using DevExpress.ExpressApp.SystemModule;
    using DevExpress.ExpressApp.Templates;
    using DevExpress.Persistent.Base;
    using DevExpress.Persistent.Validation;
    using DevExpress.Xpo;
    using DevExpress.XtraPrinting.Native;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    
    namespace E1554.Module
    {
        public interface ISupportFilterByDate
        {
            // Properties
            DateTime Date { get; }
        }
    
        [NonPersistent]
        public class DateInterval
        {
            private DateTime _start;
    
            private DateTime _end;
    
            public DateTime Start
            {
                get
                {
                    return this._start;
                }
                set
                {
                    this._start = value;
                    bool flag = value > this._end;
                    if (flag)
                    {
                        this._end = this._start;
                    }
                }
            }
    
            public DateTime End
            {
                get
                {
                    return this._end;
                }
                set
                {
                    this._end = value;
                    bool flag = value < this._start;
                    if (flag)
                    {
                        this._start = value;
                    }
                }
            }
        }
        public enum TransactionStatus
        {
            [XafDisplayName("Cancelled")]
            Cancelled = 3,
            [XafDisplayName("Comlited")]
            Comlited = 2,
            [XafDisplayName("Save")]
            Save = 1
        }
       public class CreateDataFilterController : ViewController
    {
        // Fields
        private IContainer components = null;
        private DetailView detailView;
        private IObjectSpace os;
        private SingleChoiceAction saFilterByDate;
        public static int SelectedIndex;
    
        // Methods
        public CreateDataFilterController()
        {
            this.InitializeComponent();
            base.RegisterActions(this.components);
            this.saFilterByDate = new SingleChoiceAction(this, "FilterByDateID", PredefinedCategory.Search);
            this.saFilterByDate.Category = "Filters";
            this.saFilterByDate.TargetObjectType = typeof(ISupportFilterByDate);
            ChoiceActionItem item = new ChoiceActionItem("所有", null) {
                Id = "All"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("今天", null) {
                Id = "Today"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("本周", null) {
                Id = "ThisWeek"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("上周", null)
            {
                Id = "PrevWeek"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("兩周", null)
            {
                Id = "TwoWeek"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("本月", null) {
                Id = "ThisMonth"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("上月", null)
            {
                Id = "PrevMonth"
            };
            this.saFilterByDate.Items.Add(item); //今天,本週,上週,兩週,本月,上月,今年,去年,指定
            item = new ChoiceActionItem("今年", null) {
                Id = "ThisYear"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("去年", null) {
                Id = "PrevYear"
            };
            this.saFilterByDate.Items.Add(item);
            item = new ChoiceActionItem("指定", null) {
                Id = "DatesInterval"
            };
            this.saFilterByDate.Items.Add(item);
            this.saFilterByDate.Caption = "按日期";
            this.saFilterByDate.PaintStyle = ActionItemPaintStyle.Caption;
            this.saFilterByDate.Execute += new SingleChoiceActionExecuteEventHandler(this.saFilterByDate_Execute);
            base.ViewControlsCreated += new EventHandler(this.CreateDataFilterController_ViewControlsCreated);
        }
        private void CreateDataFilterController_Activated(object sender, EventArgs e)
        {
            this.SetCurrentFilterItem();
        }
    
        private void CreateDataFilterController_ViewControlsCreated(object sender, EventArgs e)
        {
            this.saFilterByDate.Active.SetItemValue("HIDE_FOR_MONTH_STATISTIC", true);
            //this.saFilterByDate.Active.SetItemValue("HIDE_FOR_MONTH_STATISTIC", (base.View.Id != "SaleItem_PivotView_ByMonth_Chart_Common") && !(base.View.Id == "SaleItem_Share_ByMonth_Chart_Common"));
        }
    
        private void dc_Accepting(object sender, DialogControllerAcceptingEventArgs e)
        {
            DateInterval currentObject = e.AcceptActionArgs.CurrentObject as DateInterval;
            ListView view = base.View as ListView;
            CriteriaOperator @operator = Helper.GetFilterByDates(view.ObjectTypeInfo.Type, currentObject.Start, currentObject.End);
            if (!view.CollectionSource.Criteria.ContainsKey("DateFilter"))
            {
                view.CollectionSource.Criteria.Add(new KeyValuePair<string, CriteriaOperator>("DateFilter", @operator));
            }
            else
            {
                view.CollectionSource.Criteria["DateFilter"] = @operator;
            }
        }
        protected override void Dispose(bool disposing)
        {
            if (disposing && (this.components != null))
            {
                this.components.Dispose();
            }
            base.Dispose(disposing);
        }
    
        private void Filter(ChoiceActionItem item, SingleChoiceActionExecuteEventArgs e)
        {
            bool flag = base.View.Model.GetValue<bool>("UseServerMode");
            ListView view = base.View as ListView;
            if ((view != null) && (item != null))
            {
                if (item.Id == "DatesInterval")
                {
                    #region MyRegion
                    this.os = base.ObjectSpace.CreateNestedObjectSpace();
                    DateInterval interval1 = new DateInterval
                    {
                        Start = DateTime.Now.Date,
                        End = DateTime.Now
                    };
                    this.detailView = base.Application.CreateDetailView(this.os, interval1);
                    this.detailView.ViewEditMode = ViewEditMode.View;
                    this.os.Committed += new EventHandler(this.os_Committed);
                    e.ShowViewParameters.CreatedView = this.detailView;
                    //if (base.Application.GetType().Name == "WinterQueenAspNetApplication")
                    //{
                    //    e.ShowViewParameters.TargetWindow = TargetWindow.NewModalWindow;
                    //}
                    e.ShowViewParameters.Context = TemplateContext.PopupWindow;
                    DialogController controller = base.Application.CreateController<DialogController>();
                    controller.Accepting += new EventHandler<DialogControllerAcceptingEventArgs>(this.dc_Accepting);
                    e.ShowViewParameters.Controllers.Add(controller); 
                    #endregion
                }
                else
                {
                    DateTime minValue = DateTime.MinValue;
                    CriteriaOperator left = null;
                    if (item.Id == "All")
                    {
                        view.CollectionSource.Criteria[0] = null;
                    }
                    else
                    {
                        #region MyRegion
                        string dateFieldStr = "Date";// "CreateOn";
                        #region MyRegion
                        if (item.Id == "Today")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm] >= LocalDateTimeToday()", new object[0]);
                            }
                            else
                            {
                                left = CriteriaOperator.Parse(string.Format("[{0}] >= LocalDateTimeToday()", dateFieldStr), new object[0]);
                            }
                        }
                        if (item.Id == "ThisWeek")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm] >= LocalDateTimeThisWeek()", new object[0]);
                            }
                            else
                            {
                                left = CriteriaOperator.Parse(string.Format("IsThisWeek([{0}])", dateFieldStr), new object[0]);
                            }
                        }
    
                        if (item.Id == "PrevWeek")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm] >= LocalDateTimeThisWeek()", new object[0]);
                            }
                            else//  IsOutlookIntervalLastWeek
                            {
                                left = CriteriaOperator.Parse(string.Format("IsOutlookIntervalLastWeek([{0}])", dateFieldStr), new object[0]);
                            }
                        }
    
                        if (item.Id == "TwoWeek")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm] >= LocalDateTimeThisWeek()", new object[0]);
                            }
                            else
                            {
                                left = CriteriaOperator.Parse(string.Format("[{0}] > ADDDAYS(LocalDateTimeToday(), -14) AND [{0}] <LocalDateTimeToday()", dateFieldStr), new object[0]);
                            }
                        }
                        #endregion
    
                        #region MyRegion
                        if (item.Id == "ThisMonth")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>= LocalDateTimeThisMonth()", new object[0]);
    
                            }
                            else
                            {
                                left = CriteriaOperator.Parse(string.Format("IsThisMonth([{0}])", dateFieldStr), new object[0]);
                            }
                        }
                        if (item.Id == "PrevMonth")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>= LocalDateTimeThisMonth()", new object[0]);
                            }
                            else
                            {
                                left = CriteriaOperator.Parse(string.Format("IsThisMonth(AddMonths([{0}],1))", dateFieldStr), new object[0]);
                            }
                        }
                        if (item.Id == "ThisYear")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>=LocalDateTimeThisYear()", new object[0]);
                            }
                            else
                            {
                                left = CriteriaOperator.Parse(string.Format("IsThisYear([{0}])", dateFieldStr), new object[0]);
                            }
                        }
                        if (item.Id == "PrevYear")
                        {
                            if (view.Model.ModelClass.ShortName == "SaleItem")
                            {
                                left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>=LocalDateTimeThisYear()", new object[0]);
                            }
                            else
                            {
                                left = CriteriaOperator.Parse(string.Format("IsThisYear(AddYears([{0}],1))", dateFieldStr), new object[0]);
                            }
                        }
                        //if (item.Id == "PrevMonth")
                        //{
                        //    DateTime time3 = DateTime.Now.AddMonths(-1);
                        //    minValue = new DateTime(time3.Year, time3.Month, 1);
                        //    DateTime time4 = minValue.AddMonths(1);
                        //    if (view.Model.ModelClass.ShortName == "SaleItem")
                        //    {
                        //        object[] parameters = new object[] { minValue, time4 };
                        //        left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>=? AND [Sale_ID.DateConfirm]<=?", parameters);
                        //    }
                        //    else
                        //    {
                        //        object[] objArray2 = new object[] { minValue, time4 };
                        //        left = CriteriaOperator.Parse("Date>=? AND Date<=?", objArray2);
                        //    }
                        //} 
                        #endregion
                        if (view.Model.ModelClass.ShortName == "Sale")
                        {
                            object[] objArray3 = new object[] { TransactionStatus.Comlited };
                            left = CriteriaOperator.And(left, CriteriaOperator.Parse("TransactionStatus=?", objArray3));
                        }
                        if (view.Model.ModelClass.ShortName == "SaleItem")
                        {
                            object[] objArray4 = new object[] { TransactionStatus.Comlited };
                            left = CriteriaOperator.And(left, CriteriaOperator.Parse("Sale_ID.TransactionStatus=?", objArray4));
                        }
                        if (!view.CollectionSource.Criteria.ContainsKey("DateFilter"))
                        {
                            view.CollectionSource.Criteria.Add(new KeyValuePair<string, CriteriaOperator>("DateFilter", left));
                        }
                        else
                        {
                            view.CollectionSource.Criteria["DateFilter"] = left;
                        }
                        #endregion
                    }                  
                }
            }
        }
        private void InitializeComponent()
        {
            base.TargetObjectType = typeof(ISupportFilterByDate);
            base.TargetViewNesting = Nesting.Root;
            base.TargetViewType = ViewType.ListView;
            base.TypeOfView = typeof(ListView);
            base.Activated += new EventHandler(this.CreateDataFilterController_Activated);
        }
    
        private void os_Committed(object sender, EventArgs e)
        {
        }
    
        private void saFilterByDate_Execute(object sender, SingleChoiceActionExecuteEventArgs e)
        {
            this.Filter(this.saFilterByDate.SelectedItem, e);
        }
    
        private void SetCurrentFilterItem()
        {        
            this.saFilterByDate.SelectedIndex = 2;
                
            this.Filter(this.saFilterByDate.Items[2], null);
        }
    
        // Properties
        public SingleChoiceAction FilterByDate
        {
            get
            {
                return this.saFilterByDate;
            }
        }
    }
    
       public class Helper
       {
           // Methods
           public static CriteriaOperator GetFilterByDates(Type obj, DateTime start, DateTime end)
           {
               CriteriaOperator @operator = null;
               if (obj.GetInterface("ISupportFilterByDate") != null)
               {
                   object[] parameters = new object[] { start, end };
                   MethodInfo method = obj.GetMethod("GetFilterString");
                   if (method != null)
                   {
                       @operator = method.Invoke(null, parameters) as CriteriaOperator;
                   }
               }
               return @operator;
           }
    
       }
    }
    using System;
    using DevExpress.Xpo;
    using DevExpress.ExpressApp;
    using DevExpress.Persistent.Base;
    using DevExpress.Persistent.BaseImpl;
    using DevExpress.Persistent.Validation;
    using DevExpress.Data.Filtering;
    using DevExpress.ExpressApp.SystemModule;
    
    namespace E1554.Module {
        [DefaultClassOptions]  
        public class Detail : BaseObject, ISupportFilterByDate
        {
            public Detail(Session session) : base(session) { }
            private string _DetailName;
            public string DetailName {
                get { return _DetailName; }
                set { SetPropertyValue("DetailName", ref _DetailName, value); }
            }
            private Master _Master;
            [Association("Master-Details")]
            public Master Master {
                get { return _Master; }
                set { SetPropertyValue("Master", ref _Master, value); }
            }
    
            private int _Qty;
            public int Qty
            {
                get { return _Qty;}
                set {
                    int oldQty = _Qty;
                    SetPropertyValue("Qty", ref _Qty, value);
                    if (!IsLoading && !IsSaving && oldQty != _Qty) { 
                        mDefaultAddress = Qty.ToString();
                        OnChanged("DefaultAddress");
                    }
                }
               
            }     
    
            [Persistent("DefaultAddress")]
            private string mDefaultAddress=null;
    
            [PersistentAlias("mDefaultAddress")]
            public string DefaultAddress
            {
                get
                {
                    if (!IsLoading && !IsSaving && mDefaultAddress == null)
                        mDefaultAddress = Qty.ToString();
                    return mDefaultAddress;
                }
                set { SetPropertyValue("DefaultAddress", ref mDefaultAddress, value); }
            }
            
            private DateTime date;
            public DateTime Date
            {
                get { return date; }
                set { SetPropertyValue("Date", ref date, value); }
            }
            public static CriteriaOperator GetFilterString(DateTime start, DateTime end)
            {
                return CriteriaOperator.Parse("Date>=? AND Date<=?", new object[]
                {
                    start,
                    end
                });
            }
        }
    }
  • 相关阅读:
    复制、删除、移动文件、获取文件的版本信息、更改文件属性,删除只读文件
    How to use the MQ?
    StreamReader、 StreamWriter
    我的第一个AJAX程序
    XML操作
    SQL 使用XML数据修改语言
    认识 ASP.NET 3.5 MVC 路由解析分析
    北京2008奥运会开幕式&闭幕式下载(NBCBT附字幕)
    认识 ASP.NET 3.5 MVC 路由 理解默认路由表
    每天都有新发现 2009年10月21日 Decimal 和存储过程OUTPUT
  • 原文地址:https://www.cnblogs.com/Tonyyang/p/5599642.html
Copyright © 2020-2023  润新知