using DevExpress.CodeParser;
|
using DevExpress.Utils.Behaviors;
|
using DevExpress.Utils.DragDrop;
|
|
namespace Yw.WinFrmUI
|
{
|
/// <summary>
|
/// GridView的拓展类
|
/// </summary>
|
public static class GridViewExtensions
|
{
|
/// <summary>
|
/// 根据 client point 获取行索引
|
/// </summary>
|
public static int GetRowHandleByCP(this GridView grid, Point cp)
|
{
|
Point pt = grid.GridControl.PointToClient(cp);
|
var hitInfo = grid.CalcHitInfo(pt);
|
return hitInfo.RowHandle;
|
}
|
|
#region 默认
|
|
/// <summary>
|
/// 普通视图设置
|
/// </summary>
|
public static void SetNormalView(this GridView grid, int height = 30)
|
{
|
grid.OptionsFind.FindNullPrompt = "检索";
|
grid.OptionsSelection.MultiSelect = false;
|
grid.OptionsMenu.EnableColumnMenu = true;
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.OptionsCustomization.AllowFilter = true;
|
grid.OptionsCustomization.AllowSort = true;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
grid.OptionsView.ShowIndicator = true;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsView.ShowDetailButtons = false;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsBehavior.Editable = false;
|
grid.OptionsBehavior.ReadOnly = true;
|
|
|
|
grid.OptionsView.EnableAppearanceOddRow = true; // 使能 // 和和上面绑定 同时使用有效
|
grid.Appearance.EvenRow.BackColor = Color.FromArgb(244, 248, 251); // 设置偶数行颜色
|
grid.OptionsView.EnableAppearanceEvenRow = true;
|
grid.Appearance.OddRow.BackColor = Color.White; // 设置偶数行颜色
|
|
grid.RowHeight = height;
|
//grid.ColumnPanelRowHeight = height;
|
//grid.GroupRowHeight = height;
|
grid.BestFitColumns();
|
}
|
|
/// <summary>
|
/// 限制功能的视图
|
/// </summary>
|
public static void SetLimitView(this GridView grid, int height = 30)
|
{
|
grid.OptionsFind.FindNullPrompt = "检索";
|
grid.OptionsSelection.MultiSelect = false;
|
grid.OptionsMenu.EnableColumnMenu = false;
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.OptionsCustomization.AllowFilter = false;
|
grid.OptionsCustomization.AllowSort = false;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsBehavior.Editable = false;
|
grid.OptionsBehavior.ReadOnly = true;
|
|
grid.OptionsView.EnableAppearanceOddRow = true; // 使能 // 和和上面绑定 同时使用有效
|
grid.Appearance.EvenRow.BackColor = Color.FromArgb(244, 248, 251); // 设置偶数行颜色
|
grid.OptionsView.EnableAppearanceEvenRow = true;
|
grid.Appearance.OddRow.BackColor = Color.White; // 设置偶数行颜色
|
|
|
grid.RowHeight = height;
|
grid.ColumnPanelRowHeight = height;
|
grid.GroupRowHeight = height;
|
grid.BestFitColumns();
|
}
|
|
/// <summary>
|
/// 普通编辑视图设置
|
/// </summary>
|
public static void SetNormalEditView(this GridView grid, int height = 30)
|
{
|
grid.OptionsFind.FindNullPrompt = "检索";
|
grid.OptionsSelection.MultiSelect = false;
|
grid.OptionsMenu.EnableColumnMenu = true;
|
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.OptionsCustomization.AllowFilter = true;
|
grid.OptionsCustomization.AllowSort = true;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsBehavior.Editable = true;
|
grid.OptionsBehavior.ReadOnly = false;
|
|
grid.OptionsView.EnableAppearanceOddRow = true;
|
grid.OptionsView.EnableAppearanceEvenRow = true;
|
grid.Appearance.OddRow.BackColor = Color.White;
|
grid.Appearance.EvenRow.BackColor = Color.FromArgb(244, 248, 251);
|
|
|
grid.RowHeight = height;
|
grid.ColumnPanelRowHeight = height;
|
grid.GroupRowHeight = height;
|
grid.BestFitColumns();
|
}
|
|
/// <summary>
|
/// 限制功能的编辑视图
|
/// </summary>
|
public static void SetLimitEditView(this GridView grid, int height = 30)
|
{
|
grid.OptionsFind.FindNullPrompt = "检索";
|
grid.OptionsSelection.MultiSelect = false;
|
grid.OptionsMenu.EnableColumnMenu = false;
|
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.OptionsCustomization.AllowFilter = false;
|
grid.OptionsCustomization.AllowSort = false;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsBehavior.Editable = true;
|
grid.OptionsBehavior.ReadOnly = false;
|
|
grid.OptionsView.EnableAppearanceOddRow = true; // 使能 // 和和上面绑定 同时使用有效
|
grid.Appearance.EvenRow.BackColor = Color.FromArgb(244, 248, 251); // 设置偶数行颜色
|
grid.OptionsView.EnableAppearanceEvenRow = true;
|
grid.Appearance.OddRow.BackColor = Color.White; // 设置偶数行颜色
|
|
|
grid.RowHeight = height;
|
grid.ColumnPanelRowHeight = height;
|
grid.GroupRowHeight = height;
|
grid.BestFitColumns();
|
}
|
|
/// <summary>
|
/// 绑定普通编辑视图设置
|
/// </summary>
|
public static void SetBindingNormalEditView(this GridView grid, int height = 30)
|
{
|
grid.OptionsFind.FindNullPrompt = "检索";
|
grid.OptionsSelection.MultiSelect = false;
|
grid.OptionsMenu.EnableColumnMenu = true;
|
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.OptionsCustomization.AllowFilter = true;
|
grid.OptionsCustomization.AllowSort = true;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsBehavior.Editable = true;
|
grid.OptionsBehavior.ReadOnly = false;
|
|
grid.RowHeight = height;
|
grid.ColumnPanelRowHeight = height;
|
grid.GroupRowHeight = height;
|
grid.BestFitColumns();
|
}
|
|
/// <summary>
|
/// 绑定限制编辑视图设置
|
/// </summary>
|
public static void SetBindingLimitEditView(this GridView grid, int height = 30)
|
{
|
grid.OptionsFind.FindNullPrompt = "检索";
|
grid.OptionsSelection.MultiSelect = false;
|
grid.OptionsMenu.EnableColumnMenu = false;
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.OptionsCustomization.AllowFilter = false;
|
grid.OptionsCustomization.AllowSort = false;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsBehavior.Editable = true;
|
grid.OptionsBehavior.ReadOnly = false;
|
|
grid.RowHeight = height;
|
grid.ColumnPanelRowHeight = height;
|
grid.GroupRowHeight = height;
|
grid.BestFitColumns();
|
|
|
}
|
|
/// <summary>
|
/// 显示ViewCaption
|
/// </summary>
|
public static void ShowViewCaption(this GridView grid, int height = 30)
|
{
|
grid.OptionsView.ShowViewCaption = true;
|
grid.ViewCaptionHeight = height;
|
grid.Appearance.ViewCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
|
}
|
|
/// <summary>
|
/// GridView注册显示行标
|
/// </summary>
|
public static void RegistCustomDrawRowIndicator(this GridView grid, int IndicatorWidth = 35)
|
{
|
grid.OptionsView.ShowIndicator = true;
|
grid.IndicatorWidth = IndicatorWidth;
|
grid.CustomDrawRowIndicator += (sender, e) =>
|
{
|
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
|
{
|
e.Info.DisplayText = (e.RowHandle + 1).ToString().Trim();
|
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
|
}
|
};
|
}
|
|
/// <summary>
|
/// 注册自定义组名
|
/// </summary>
|
public static void RegistCustomGroupRow(this GridView grid, GridColumn col, Func<object, string> func)
|
{
|
grid.CustomDrawGroupRow += (sender, e) =>
|
{
|
var gridGroupRowInfo = e.Info as GridGroupRowInfo;
|
if (gridGroupRowInfo.Column == col)
|
{
|
var index = grid.GetDataRowHandleByGroupRowHandle(e.RowHandle);
|
var row = grid.GetRow(index);
|
if (row == null)
|
return;
|
gridGroupRowInfo.GroupText = func(row);
|
}
|
};
|
}
|
|
/// <summary>
|
/// 自定义单元格样式
|
/// </summary>
|
public static void RegistCustomDrawCell(this GridView grid, System.Drawing.Color? bgColor = null, System.Drawing.Color? foreColor = null)
|
{
|
if (bgColor == null)
|
bgColor = System.Drawing.Color.FromArgb(0, 122, 204);
|
if (foreColor == null)
|
foreColor = System.Drawing.Color.White;
|
grid.CustomDrawCell += (sender, e) =>
|
{
|
if (e.RowHandle == (sender as GridView).FocusedRowHandle)
|
{
|
var cell = e.Cell as DevExpress.XtraGrid.Views.Grid.ViewInfo.GridCellInfo;
|
if (!cell.IsMerged)
|
{
|
e.Appearance.BackColor = bgColor.Value;
|
e.Appearance.ForeColor = foreColor.Value;
|
}
|
}
|
};
|
}
|
|
/// <summary>
|
/// 获取当前数据行
|
/// </summary>
|
public static T GetCurrentViewModel<T>(this GridView grid, List<T> source) where T : class
|
{
|
if (source == null)
|
return default;
|
if (source.Count < 1)
|
{
|
return default;
|
}
|
var row = grid.GetFocusedRow() as T;
|
if (row == null)
|
{
|
return null;
|
}
|
return row;
|
}
|
|
/// <summary>
|
/// 获取当前数据行
|
/// </summary>
|
public static T GetCurrentViewModel<T>(this GridView grid, BindingList<T> source) where T : class
|
{
|
if (source == null)
|
return default;
|
if (source.Count < 1)
|
{
|
return default;
|
}
|
var row = grid.GetFocusedRow() as T;
|
if (row == null)
|
{
|
return null;
|
}
|
return row;
|
}
|
|
#endregion
|
|
/// <summary>
|
/// 绑定按列分组视图设置 Nsx_20210729
|
/// </summary>
|
public static void SetGroupView(this GridView grid, GridColumn col, int height = 30)
|
{
|
grid.GroupCount = 1;
|
grid.RowHeight = height;
|
grid.GroupRowHeight = height;
|
grid.ColumnPanelRowHeight = height;
|
grid.OptionsBehavior.ReadOnly = true;
|
grid.OptionsBehavior.Editable = false;
|
grid.OptionsView.ShowDetailButtons = false;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.OptionsBehavior.AllowFixedGroups = DevExpress.Utils.DefaultBoolean.True;
|
grid.OptionsBehavior.AllowPixelScrolling = DevExpress.Utils.DefaultBoolean.True;
|
grid.OptionsClipboard.ClipboardMode = DevExpress.Export.ClipboardMode.Formatted;
|
grid.OptionsBehavior.AutoExpandAllGroups = true;
|
grid.OptionsFind.AlwaysVisible = false;
|
grid.OptionsPrint.PrintHorzLines = false;
|
grid.OptionsPrint.PrintPreview = true;
|
grid.OptionsPrint.PrintVertLines = false;
|
grid.OptionsView.GroupDrawMode = DevExpress.XtraGrid.Views.Grid.GroupDrawMode.Office;
|
grid.OptionsView.ShowGroupedColumns = true;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsView.ShowIndicator = false;
|
grid.OptionsView.ShowVerticalLines = DevExpress.Utils.DefaultBoolean.False;
|
grid.PreviewFieldName = "PlainText";
|
grid.SortInfo.AddRange(new DevExpress.XtraGrid.Columns.GridColumnSortInfo[] {
|
new DevExpress.XtraGrid.Columns.GridColumnSortInfo(col, DevExpress.Data.ColumnSortOrder.None)});
|
grid.BestFitColumns();
|
}
|
|
|
/// <summary>
|
/// 普通编辑视图设置
|
/// </summary>
|
public static void SetDefaultEditView(this GridView grid, int height = 30)
|
{
|
grid.OptionsFind.FindNullPrompt = "检索";
|
grid.OptionsSelection.MultiSelect = false;
|
grid.OptionsMenu.EnableColumnMenu = true;
|
|
grid.OptionsSelection.EnableAppearanceFocusedCell = false;
|
grid.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
grid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFullFocus;
|
grid.OptionsCustomization.AllowFilter = true;
|
grid.OptionsCustomization.AllowSort = true;
|
grid.OptionsCustomization.AllowQuickHideColumns = false;
|
grid.OptionsView.ShowAutoFilterRow = false;
|
grid.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
|
grid.OptionsView.NewItemRowPosition = NewItemRowPosition.None;
|
grid.OptionsView.ShowGroupPanel = false;
|
grid.OptionsClipboard.AllowCopy = DefaultBoolean.True;
|
grid.OptionsBehavior.Editable = true;
|
grid.OptionsBehavior.ReadOnly = false;
|
|
grid.OptionsView.EnableAppearanceOddRow = true;
|
grid.OptionsView.EnableAppearanceEvenRow = true;
|
grid.Appearance.OddRow.BackColor = Color.White;
|
grid.Appearance.EvenRow.BackColor = Color.FromArgb(244, 248, 251);
|
|
|
grid.RowHeight = height;
|
grid.ColumnPanelRowHeight = height;
|
grid.GroupRowHeight = height;
|
grid.BestFitColumns();
|
}
|
|
|
/// <summary>
|
/// 设置拖拽状态下的普通视图
|
/// </summary>
|
public static void SetDragNormalView<t>(this GridView rhs, int height = 30) where t : class
|
{
|
rhs.SetNormalView(height);
|
|
GridHitInfo downHitInfo = null;
|
rhs.MouseDown += (sender, e) =>
|
{
|
var view = sender as GridView;
|
downHitInfo = null;
|
if (view != null)
|
{
|
GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));
|
if (e.Button == MouseButtons.Left && hitInfo.InRow && hitInfo.HitTest != GridHitTest.RowIndicator)
|
{
|
downHitInfo = hitInfo;
|
}
|
}
|
};
|
|
|
rhs.MouseMove += (sender, e) =>
|
{
|
var view = sender as GridView;
|
if (e.Button == MouseButtons.Left && downHitInfo != null)
|
{
|
Size dragSize = SystemInformation.DragSize;
|
Rectangle dragRect = new Rectangle(new Point(downHitInfo.HitPoint.X - dragSize.Width / 2, downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);
|
|
if (!dragRect.Contains(new Point(e.X, e.Y)))
|
{
|
if (view != null)
|
{
|
var dragVm = view.GetSelectedRows().Select(rownum => view.GetRow(rownum) as t).FirstOrDefault();
|
if (dragVm != null)
|
{
|
view.GridControl.DoDragDrop(dragVm, DragDropEffects.Move);
|
}
|
}
|
downHitInfo = null;
|
DevExpress.Utils.DXMouseEventArgs.GetMouseArgs(e).Handled = true;
|
}
|
}
|
};
|
}
|
|
|
|
|
|
}
|
}
|