using DevExpress.XtraEditors;
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.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ExtensionsDev
{
///
///
///
public static class SearchLookUpEditExtension
{
///
/// 设置SearchLookUpEdit默认属性
///
///
/// 数据源
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;
}
///
/// 绑定SearchLookUpEdit数据源
///
///
/// 数据源
public static SearchLookUpEdit SetStringData(this SearchLookUpEdit ctrl, IEnumerable data)
{
ctrl.Properties.DataSource = data;
GridView view = ctrl.Properties.View;
view.OptionsView.ShowColumnHeaders = false;
view.GridControl.Init(searchLookUpEdit: ctrl);
return ctrl;
}
///
/// 绑定SearchLookUpEdit数据源
///
///
/// 数据源
public static SearchLookUpEdit SetData(this SearchLookUpEdit ctrl, List data, string displayField = "")
{
ctrl.QueryPopUp += Ctrl_QueryPopUp;
ctrl.Properties.DataSource = data;
GridView view = ctrl.Properties.View;
view.OptionsView.ShowColumnHeaders = true;
view.GridControl.Init(searchLookUpEdit:ctrl);
ctrl.CustomDisplayText += (sender, e) =>
{
if (e.Value == null) return;
if (string.IsNullOrWhiteSpace(displayField))
e.DisplayText = e.Value.ToString();
else
{
e.DisplayText = typeof(T).GetProperty(displayField).GetValue(e.Value).ToString();
}
};
return ctrl;
}
private static void Ctrl_QueryPopUp(object sender, System.ComponentModel.CancelEventArgs e)
{
var ctrl = sender as SearchLookUpEdit;
var view = ctrl.Properties.View;
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.First(p => p.Name == column.FieldName);
var attrDisplay = prop.GetCustomAttribute();
var attrDisplayName = prop.GetCustomAttribute();
if (attrDisplay == null && attrDisplayName == null)
column.Visible = false;
else if (attrDisplay != null && attrDisplay.GetAutoGenerateFilter() != null && !attrDisplay.AutoGenerateFilter)
column.Visible = false;
else
column.Visible = true;
}
}
}
public static SearchLookUpEdit SetSearchGridLookUpEditMultiSelected(this SearchLookUpEdit ctrl,string nullText = "请选择")
{
var view = ctrl.Properties.PopupView as DevExpress.XtraGrid.Views.Grid.GridView;
view.OptionsSelection.MultiSelect = true;
view.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
view.OptionsSelection.CheckBoxSelectorColumnWidth = 45;
ctrl.EditValue = null;
ctrl.Properties.NullText = null;
ctrl.Properties.NullValuePrompt = nullText;
ctrl.Properties.AllowFocused = false;
ctrl.Properties.ShowNullValuePrompt = ShowNullValuePromptOptions.Default;
ctrl.Properties.ShowAddNewButton = false;
var values = new List();
//var keys = new List();
var texts = new List();
ctrl.Properties.Tag = values;
// ctrl.Tag = keys;
ctrl.CloseUp += (s, e) =>
{
values.Clear();
var indexs = view.GetSelectedRows();
foreach ( var row in indexs )
{
var value =view.GetRow(row).MapTo();
values.Add(value);
var text = view.GetRowCellDisplayText(row, ctrl.Properties.DisplayMember);
texts.Add(text);
//var key = view.GetRowCellDisplayText(row, ctrl.Properties.KeyMember);
//keys.Add(key);
}
ctrl.RefreshEditValue();
};
ctrl.Properties.CustomDisplayText += (s, e) =>
{
if (!ctrl.IsPopupOpen)
e.DisplayText = string.Join(",", texts.ToArray());
};
return ctrl;
}
}
}