using DevExpress.Utils.Behaviors; using DevExpress.Utils.DragDrop; namespace Yw.WinFrmUI { /// /// GridView的拓展类 /// public static class GridViewExtensions { #region 默认 /// /// 普通视图设置 /// 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(); } /// /// 限制功能的视图 /// 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(); } /// /// 普通编辑视图设置 /// 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(); } /// /// 限制功能的编辑视图 /// 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(); } /// /// 绑定普通编辑视图设置 /// 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(); } /// /// 绑定限制编辑视图设置 /// 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(); } /// /// 显示ViewCaption /// 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; } /// /// GridView注册显示行标 /// 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; } }; } /// /// 注册自定义组名 /// public static void RegistCustomGroupRow(this GridView grid, GridColumn col, Func 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); } }; } /// /// 自定义单元格样式 /// 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; } } }; } /// /// 获取当前数据行 /// public static T GetCurrentViewModel(this GridView grid, List 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; } /// /// 获取当前数据行 /// public static T GetCurrentViewModel(this GridView grid, BindingList 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 /// /// 绑定按列分组视图设置 Nsx_20210729 /// 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(); } /// /// 普通编辑视图设置 /// 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(); } /// /// 设置拖拽状态下的普通视图 /// public static void SetDragNormalView(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; } } }; } #region 拖拽 /// /// 附加拖拽行为 /// public static void AttachDragBehavior(this GridView grid, BehaviorManager bm) { bm.Attach(grid, behavior => { behavior.BeginDragDrop += (sender, e) => { }; behavior.DragDrop += (sender, e) => { }; behavior.EndDragDrop += (sender, e) => { }; }); } /// /// 解除拖拽行为 /// public static void DetachDragBehavior(this GridView grid, BehaviorManager bm) { bm.Detach(grid); } #endregion } }