123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- using DevExpress.CodeParser;
- using DevExpress.Utils;
- using DevExpress.XtraEditors;
- using DevExpress.XtraEditors.Repository;
- using DevExpress.XtraGrid.Columns;
- using DevExpress.XtraGrid.Views.Grid;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.ComponentModel.DataAnnotations;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace ExtensionsDev
- {
- /// <summary>
- ///
- /// </summary>
- public static class SearchLookUpEditExtension
- {
- /// <summary>
- /// 设置SearchLookUpEdit默认属性
- /// </summary>
- /// <param name="ctrl"></param>
- /// <param name="nullText">数据源</param>
- /// <param name="showClearBtn"></param>
- public static SearchLookUpEdit UseDefault(this SearchLookUpEdit ctrl, string nullText = "请选择", bool showClearBtn = false)
- {
- ctrl.EditValue = null;
- ctrl.Properties.NullText = null;
- ctrl.Properties.NullValuePrompt = nullText;
- ctrl.Properties.AllowFocused = false;
- ctrl.Properties.ShowNullValuePrompt = ShowNullValuePromptOptions.Default;
- ctrl.Properties.ShowAddNewButton = false;
- ctrl.Properties.ShowClearButton = showClearBtn;
- ctrl.Properties.ShowFooter = false;
- ctrl.Properties.ShowPopupShadow = true;
- return ctrl;
- }
- public static RepositoryItemSearchLookUpEdit UseDefault(this RepositoryItemSearchLookUpEdit ctrl, string nullText = "请选择", bool showClearBtn = false)
- {
- ctrl.NullText = null;
- ctrl.NullValuePrompt = nullText;
- ctrl.AllowFocused = false;
- ctrl.ShowNullValuePrompt = ShowNullValuePromptOptions.Default;
- ctrl.ShowAddNewButton = false;
- ctrl.ShowClearButton = showClearBtn;
- ctrl.ShowFooter = false;
- ctrl.ShowPopupShadow = true;
- return ctrl;
- }
- /// <summary>
- /// 绑定SearchLookUpEdit数据源
- /// </summary>
- /// <param name="ctrl"></param>
- /// <param name="data">数据源</param>
- public static SearchLookUpEdit SetStringData(this SearchLookUpEdit ctrl, IEnumerable<string> data)
- {
- ctrl.Properties.DataSource = data;
- GridView view = ctrl.Properties.View;
- view.OptionsView.ShowColumnHeaders = false;
- view.GridControl.UseDefault<string>(null);
- return ctrl;
- }
- public static SearchLookUpEdit SetData<T>(this SearchLookUpEdit ctrl, List<T> data, string displayField, string valueField = "This")
- {
- ctrl.EditValue = null;
- ctrl.Properties.ValueMember = valueField;
- ctrl.Properties.KeyMember = valueField;
- ctrl.Properties.DisplayMember = displayField;
- ctrl.QueryPopUp += Ctrl_QueryPopUp;
- ctrl.Properties.DataSource = data;
- GridView view = ctrl.Properties.View;
- view.Tag = ctrl;
- view.OptionsView.ShowColumnHeaders = true;
- view.GridControl.UseDefault<T>(null);
- return ctrl;
- }
- public static SearchLookUpEdit SetData<T>(this SearchLookUpEdit ctrl, Func<Task<IEnumerable<T>>> onGetDataAsync, string displayField, string valueField = "This")
- {
- ctrl.EditValue = null;
- ctrl.Properties.ValueMember = valueField;
- ctrl.Properties.KeyMember = valueField;
- ctrl.Properties.DisplayMember = displayField;
- ctrl.QueryPopUp += Ctrl_QueryPopUp;
- ctrl.Tag = onGetDataAsync;
- GridView view = ctrl.Properties.View;
- view.Tag = ctrl;
- view.OptionsView.ShowColumnHeaders = true;
- view.GridControl.UseDefault<T>(null);
- ctrl.Properties.DataSource = onGetDataAsync().Result;
- return ctrl;
- }
- internal static RepositoryItemSearchLookUpEdit SetData<T>(this RepositoryItemSearchLookUpEdit ctrl, List<T> data)
- {
- ctrl.QueryPopUp += Ctrl_QueryPopUp;
- ctrl.DataSource = data;
- GridView view = ctrl.View;
- view.Layout += (sender, e) =>
- {
- (sender as GridView).SaveLayoutToXml($"Layout\\{ctrl.Name}.xml", OptionsLayoutBase.FullLayout);
- };
- if (File.Exists($"Layout\\{ctrl.Name}.xml"))
- {
- view.RestoreLayoutFromXml($"Layout\\{ctrl.Name}.xml", OptionsLayoutBase.FullLayout);
- view.ClearColumnsFilter();
- view.ClearFindFilter();
- view.ClearInHeaderSearchText();
- view.ClearSorting();
- view.ClearSelection();
- }
- view.Tag = ctrl;
- view.OptionsView.ShowColumnHeaders = true;
- return ctrl;
- }
- internal static RepositoryItemSearchLookUpEdit SetData<T>(this RepositoryItemSearchLookUpEdit ctrl, Func<Task<List<T>>> onGetDataAsync)
- {
- ctrl.QueryPopUp += Ctrl_QueryPopUp;
- ctrl.Tag = onGetDataAsync;
- GridView view = ctrl.View;
- view.Layout += (sender, e) =>
- {
- (sender as GridView).SaveLayoutToXml($"Layout\\{ctrl.Name}.xml", OptionsLayoutBase.FullLayout);
- };
- if (File.Exists($"Layout\\{ctrl.Name}.xml"))
- {
- view.RestoreLayoutFromXml($"Layout\\{ctrl.Name}.xml", OptionsLayoutBase.FullLayout);
- view.ClearColumnsFilter();
- view.ClearFindFilter();
- view.ClearInHeaderSearchText();
- view.ClearSorting();
- view.ClearSelection();
- }
- view.Tag = ctrl;
- view.OptionsView.ShowColumnHeaders = true;
- return ctrl;
- }
- private static async void Ctrl_QueryPopUp(object sender, System.ComponentModel.CancelEventArgs e)
- {
- var ctrl = sender as SearchLookUpEdit;
- var view = ctrl.Properties.View;
- view.GridControl.HideColumn("CreateTime", "UpdateTime", "Enable", "Enabled", "IsEnable", "Remark");
- view.GridControl.HideColumn(p => p.FieldName.ToUpper().EndsWith("ID"));
- view.GridControl.HideColumn(p => p.ColumnType == typeof(List<>));
- //view.GridControl.HideColumn(p => p.ColumnType.BaseType != null && p.ColumnType.BaseType.Name.Contains("BaseEntity"));
- if (ctrl.Tag is RepositoryItemSearchLookUpEdit edit)
- {
- var onGetData = (Func<dynamic>)edit.Tag;
- if (onGetData != null)
- {
- ctrl.Properties.DataSource = await onGetData();
- edit.DataSource = await onGetData();
- }
- }
- else
- {
- var onGetData = (Func<dynamic>)ctrl.Tag;
- if (onGetData != null)
- {
- ctrl.Properties.DataSource = await onGetData();
- }
- }
- var dataType = view.DataSource.GetType().GetGenericArguments().Single();
- var props = dataType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
- foreach (GridColumn column in view.Columns)
- {
- if (column.Visible)
- {
- var prop = props.FirstOrDefault(p => p.Name == column.FieldName);
- if (prop == null) continue;
- var attrDisplay = prop.GetCustomAttribute<DisplayAttribute>();
- var attrDisplayName = prop.GetCustomAttribute<DisplayNameAttribute>();
- if (attrDisplay == null && attrDisplayName == null)
- column.Visible = false;
- else if (attrDisplay != null && attrDisplay.GetAutoGenerateFilter() != null && !attrDisplay.AutoGenerateFilter)
- column.Visible = false;
- else
- column.Visible = true;
- }
- }
- }
- }
- }
|