[原] XAF 添加日期筛选下拉选择
生活随笔
收集整理的這篇文章主要介紹了
[原] 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{// PropertiesDateTime 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 {// Fieldsprivate IContainer components = null;private DetailView detailView;private IObjectSpace os;private SingleChoiceAction saFilterByDate;public static int SelectedIndex;// Methodspublic 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 MyRegionthis.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 MyRegionstring dateFieldStr = "Date";// "CreateOn";#region MyRegionif (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 MyRegionif (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);// }//} #endregionif (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);}// Propertiespublic SingleChoiceAction FilterByDate{get{return this.saFilterByDate;}} }public class Helper{// Methodspublic 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});}} }?
轉載于:https://www.cnblogs.com/Tonyyang/p/5599642.html
總結
以上是生活随笔為你收集整理的[原] XAF 添加日期筛选下拉选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20145233《Java程序设计》课程
- 下一篇: 2016年工作中遇到的问题31-40