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

时间:2023-03-09 03:31:35
[原] XAF 添加日期筛选下拉选择

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

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

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

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 = ,
[XafDisplayName("Comlited")]
Comlited = ,
[XafDisplayName("Save")]
Save =
}
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[] = 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[]);
}
else
{
left = CriteriaOperator.Parse(string.Format("[{0}] >= LocalDateTimeToday()", dateFieldStr), new object[]);
}
}
if (item.Id == "ThisWeek")
{
if (view.Model.ModelClass.ShortName == "SaleItem")
{
left = CriteriaOperator.Parse("[Sale_ID.DateConfirm] >= LocalDateTimeThisWeek()", new object[]);
}
else
{
left = CriteriaOperator.Parse(string.Format("IsThisWeek([{0}])", dateFieldStr), new object[]);
}
} if (item.Id == "PrevWeek")
{
if (view.Model.ModelClass.ShortName == "SaleItem")
{
left = CriteriaOperator.Parse("[Sale_ID.DateConfirm] >= LocalDateTimeThisWeek()", new object[]);
}
else// IsOutlookIntervalLastWeek
{
left = CriteriaOperator.Parse(string.Format("IsOutlookIntervalLastWeek([{0}])", dateFieldStr), new object[]);
}
} if (item.Id == "TwoWeek")
{
if (view.Model.ModelClass.ShortName == "SaleItem")
{
left = CriteriaOperator.Parse("[Sale_ID.DateConfirm] >= LocalDateTimeThisWeek()", new object[]);
}
else
{
left = CriteriaOperator.Parse(string.Format("[{0}] > ADDDAYS(LocalDateTimeToday(), -14) AND [{0}] <LocalDateTimeToday()", dateFieldStr), new object[]);
}
}
#endregion #region MyRegion
if (item.Id == "ThisMonth")
{
if (view.Model.ModelClass.ShortName == "SaleItem")
{
left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>= LocalDateTimeThisMonth()", new object[]); }
else
{
left = CriteriaOperator.Parse(string.Format("IsThisMonth([{0}])", dateFieldStr), new object[]);
}
}
if (item.Id == "PrevMonth")
{
if (view.Model.ModelClass.ShortName == "SaleItem")
{
left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>= LocalDateTimeThisMonth()", new object[]);
}
else
{
left = CriteriaOperator.Parse(string.Format("IsThisMonth(AddMonths([{0}],1))", dateFieldStr), new object[]);
}
}
if (item.Id == "ThisYear")
{
if (view.Model.ModelClass.ShortName == "SaleItem")
{
left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>=LocalDateTimeThisYear()", new object[]);
}
else
{
left = CriteriaOperator.Parse(string.Format("IsThisYear([{0}])", dateFieldStr), new object[]);
}
}
if (item.Id == "PrevYear")
{
if (view.Model.ModelClass.ShortName == "SaleItem")
{
left = CriteriaOperator.Parse("[Sale_ID.DateConfirm]>=LocalDateTimeThisYear()", new object[]);
}
else
{
left = CriteriaOperator.Parse(string.Format("IsThisYear(AddYears([{0}],1))", dateFieldStr), new object[]);
}
}
//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 = ; this.Filter(this.saFilterByDate.Items[], 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
});
}
}
}