#region using System.Drawing; using System.Windows.Forms; using CSFrameworkV5.Business; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Interfaces.InterfaceModels; using DevExpress.Utils; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors.Repository; using DevExpress.XtraGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraTreeList; using CustomDrawEventArgs = DevExpress.XtraGrid.Views.Base.CustomDrawEventArgs; #endregion ///*************************************************************************/ ///* ///* 文件名 :DevStyle.cs ///* 程序说明 : 用于设置Dev控件的样式 ///* 原创作者 :www.csframework.com ///* ///* Copyright 2006-2021 C/S框架网 www.csframework.com ///* ///**************************************************************************/ /// namespace CSFrameworkV5.Library.CommonClass { /// /// 设置GridControl,GridView控件显示样式. /// public class DevStyle { private const int DEF_ROW_HEIGHT = 25; private const int DEF_COLUMN_HEADER_HEIGHT = 25; private const string DEF_EMPTY_DATA_PROMPT = "* 没有查询到数据!\r\n* no data found!"; private const string DEF_EMPTY_DATA_FONT = "微软雅黑"; private const string DEF_LABEL_PREFIX = "lbl"; /// /// 在表格导航按钮内增加一个自定义按钮 /// /// 表格控件 /// 按钮编号 /// 按钮图片 /// 按钮提示消息 public static void AddCustomButton(GridControl grid, int buttonID, Image buttonImage, string buttonHint) { grid.BeginInit(); var list = grid.EmbeddedNavigator.Buttons.ImageList as ImageList; list.Images.Add(buttonImage); var btn = new NavigatorCustomButton(buttonID, buttonHint); grid.EmbeddedNavigator.Buttons.CustomButtons .AddRange(new[] { btn }); grid.EndInit(); } /// /// 应用表格自定义样式 /// /// GridView /// 资料表名 public static void ApplyCustomGrid(GridView gv, string tableName) { var configs = new AdvancedFormConfig().GetFormConfig(Loginer.CurrentUser.DBID, tableName, Loginer.CurrentUser.Account); var current = FormConfig.GetCurrent(configs); if (current == null) return; string fieldName; foreach (GridColumn c in gv.Columns) { fieldName = c.FieldName; var config = current.GetFieldConfig(fieldName); if (config != null && !string.IsNullOrEmpty(config.CaptionCustom)) { c.Visible = config.Visible; c.Caption = config.CaptionCustom; c.Width = config.Width > 0 ? config.Width : c.Width; c.OptionsColumn.ReadOnly = config.ReadOnly; if (config.Point > 0) { c.DisplayFormat.FormatType = FormatType.Custom; c.DisplayFormat.FormatString = "N" + config.Point.ToStringEx(); } } } } /// /// 应用标签标题自定义样式 /// /// PanelControl组件 /// 资料表名 public static void ApplyCustomLabel(PanelControl pnl, string tableName) { var configs = new AdvancedFormConfig().GetFormConfig(Loginer.CurrentUser.DBID, tableName, Loginer.CurrentUser.Account); var current = FormConfig.GetCurrent(configs); if (current == null) return; try { pnl.SuspendLayout(); string fieldName; foreach (Control c in pnl.Controls) if (c is LabelControl && c.Name.Substring(0, 3) == DEF_LABEL_PREFIX) { fieldName = c.Name.Substring(3, c.Name.Length - 3); var config = current.GetFieldConfig(fieldName); if (config != null && !string.IsNullOrEmpty(config.CaptionCustom)) { c.Text = config.CaptionCustom; c.Refresh(); } } } finally { pnl.ResumeLayout(); } } /// /// 给表格绘制背景字体 /// /// /// private static void GridView_CustomDrawEmptyForeground(object sender, CustomDrawEventArgs e) { if ((sender as GridView).RowCount == 0) { var width = 300; var height = 60; var font_size = 18; var str = DEF_EMPTY_DATA_PROMPT; using (var f = new Font(DEF_EMPTY_DATA_FONT, font_size, FontStyle.Bold)) { var r = new Rectangle((e.Bounds.Width - width) / 2, (e.Bounds.Height - height) / 2, width, height); e.Graphics.DrawString(str, f, Brushes.LightBlue, r); e.Handled = true; } } } /// /// 批量设置表格内所有RepositoryItemCheckEdit属性 /// /// RepositoryItemCheckEdit所在的列数组 public static void SetCheckEditColumnConfig(params GridColumn[] columns) { foreach (var col in columns) if (col.ColumnEdit != null) SetCheckEditLayout((RepositoryItemCheckEdit)col.ColumnEdit); } /// /// 设置RepositoryItemCheckEdit组件的绑定样式. /// /// RepositoryItemCheckEdit private static void SetCheckEditLayout( RepositoryItemCheckEdit propCheckEdit) { if (propCheckEdit == null) return; propCheckEdit.ValueChecked = "Y"; //当值为Y勾选 propCheckEdit.ValueGrayed = ""; //当值为空变为灰色 propCheckEdit.ValueUnchecked = "N"; //当值为N取消勾选 propCheckEdit.NullStyle = StyleIndeterminate.Unchecked; } /// /// 批量设置CheckEdit的绑定样式. /// /// CheckEdit数组 public static void SetCheckEditLayout(params CheckEdit[] checkEdits) { foreach (var edit in checkEdits) SetCheckEditLayout(edit.Properties); } /// /// 设置栏位的过虑条件 /// /// GridColumn /// filter:过滤条件 public static void SetDetailColumnFilter(GridColumn col, string filter) { var finfo = new ColumnFilterInfo(filter, ""); col.FilterInfo = finfo; } /// /// 设置明细表格的显示样式 /// /// 明细表格 /// 奇偶行高亮显示 public static void SetDetailGridViewLayout(GridView gridView, bool useOddColor) { SetDetailGridViewLayout(gridView); if (!useOddColor) { gridView.GridControl.BeginInit(); gridView.OptionsView.EnableAppearanceOddRow = false; gridView.Appearance.OddRow.Options.UseBackColor = false; gridView.Appearance.OddRow.BackColor = Color.Empty; gridView.GridControl.EndInit(); } } /// /// 设置明细表格布局. OptionsView,OptionsCustomization设置 /// public static void SetDetailGridViewLayout(GridView gridView) { SetGridReadColumnStyle(gridView); gridView.GridControl.BeginInit(); gridView.OptionsView.RowAutoHeight = false; gridView.RowHeight = DEF_ROW_HEIGHT; gridView.ColumnPanelRowHeight = DEF_COLUMN_HEADER_HEIGHT; gridView.OptionsNavigation.EnterMoveNextColumn = false; //注意: 禁止Grid管理Enter键 gridView.OptionsView.ShowGroupPanel = false; gridView.OptionsView.ColumnAutoWidth = false; gridView.OptionsView.NewItemRowPosition = NewItemRowPosition.None; gridView.OptionsView.EnableAppearanceOddRow = true; //gridView.Appearance.OddRow.BackColor = System.Drawing.Color.FromName(SystemConfig.CurrentConfig.GridOddColorName); //gridView.Appearance.OddRow.Options.UseBackColor = SystemConfig.CurrentConfig.GridAllowOddColor; gridView.OptionsCustomization.AllowFilter = false; gridView.OptionsCustomization.AllowSort = false; gridView.OptionsSelection.EnableAppearanceFocusedCell = true; foreach (GridColumn col in gridView.Columns) if (col.OptionsColumn.AllowEdit == false || col.OptionsColumn.ReadOnly) col.AppearanceCell.BackColor = Color.Silver; gridView.GridControl.EndInit(); gridView.CustomDrawEmptyForeground += GridView_CustomDrawEmptyForeground; } /// /// 设置ButtonEdit的读写状态 /// /// ButtonEdit组件 /// 设置ReadOnly属性是否可访问 public static void SetEditorStyle(ButtonEdit edit, bool access) { edit.Properties.Buttons[0].Enabled = access; edit.Properties.ReadOnly = !access; } /// /// 设置输入控件的读写状态,可读为白底黑字,不可读为灰底黑字 /// /// 输入控件 /// 设置ReadOnly属性是否可访问 public static void SetEditorStyle(BaseEdit edit, bool access) { edit.Properties.ReadOnly = !access; if (access) { if (!(edit is CheckEdit)) { edit.BackColor = Color.White; edit.ForeColor = Color.Black; } } else { if (!(edit is CheckEdit)) { edit.BackColor = Color.AliceBlue; edit.ForeColor = Color.Black; } } } /// /// 设置表格控件的布局. 比如按钮设置. /// public static void SetGridControlLayout(GridControl grid, bool allowEdit) { var btns = grid.EmbeddedNavigator.Buttons; grid.BeginInit(); grid.EmbeddedNavigator.ButtonStyle = BorderStyles.Office2003; grid.UseEmbeddedNavigator = true; btns.Append.Visible = false; btns.CancelEdit.Visible = false; btns.Edit.Visible = false; btns.Remove.Visible = false; btns.EndEdit.Visible = false; btns.NextPage.Visible = false; btns.PrevPage.Visible = false; ((GridView)grid.Views[0]).OptionsBehavior.Editable = allowEdit; //允许编辑状态 if (allowEdit) //增加三个自定义按钮(ADD,INSERT,DELETE) { var img = new ImageList(); img.Images.Add(Globals.LoadImage("16_Add.ico")); img.Images.Add(Globals.LoadImage("16_Insert.ico")); img.Images.Add(Globals.LoadImage("16_Delete.ico")); grid.EmbeddedNavigator.Buttons.ImageList = img; btns.CustomButtons.Clear(); var btnDtlAdd = new NavigatorCustomButton(DetailButtons.Add, "新增记录"); var btnDtlInsert = new NavigatorCustomButton(DetailButtons.Insert, "插入记录"); var btnDtlDelete = new NavigatorCustomButton(DetailButtons.Delete, "删除记录"); btns.CustomButtons.AddRange(new[] { btnDtlAdd, btnDtlInsert, btnDtlDelete }); } grid.EndInit(); } /// /// 设置表格控件的布局. 比如按钮设置. /// public static void SetGridControlLayout(GridControl grid, bool allowEdit, bool add, bool insert, bool delete) { var btns = grid.EmbeddedNavigator.Buttons; grid.BeginInit(); grid.EmbeddedNavigator.ButtonStyle = BorderStyles.Office2003; grid.UseEmbeddedNavigator = true; btns.Append.Visible = false; btns.CancelEdit.Visible = false; btns.Edit.Visible = false; btns.Remove.Visible = false; btns.EndEdit.Visible = false; btns.NextPage.Visible = false; btns.PrevPage.Visible = false; ((GridView)grid.Views[0]).OptionsBehavior.Editable = allowEdit; //允许编辑状态 if (allowEdit) //增加三个自定义按钮(ADD,INSERT,DELETE) { var img = new ImageList(); img.Images.Add(Globals.LoadImage("16_Add.ico")); img.Images.Add(Globals.LoadImage("16_Insert.ico")); img.Images.Add(Globals.LoadImage("16_Delete.ico")); grid.EmbeddedNavigator.Buttons.ImageList = img; btns.CustomButtons.Clear(); if (add) { var btnDtlAdd = new NavigatorCustomButton(DetailButtons.Add, "新增记录"); btns.CustomButtons.AddRange(new[] { btnDtlAdd }); } if (insert) { var btnDtlInsert = new NavigatorCustomButton(DetailButtons.Insert, "插入记录"); btns.CustomButtons.AddRange(new[] { btnDtlInsert }); } if (delete) { var btnDtlDelete = new NavigatorCustomButton(DetailButtons.Delete, "删除记录"); btns.CustomButtons.AddRange(new[] { btnDtlDelete }); } } grid.EndInit(); } /// /// 设置所有只读栏位的显示样式 /// /// public static void SetGridReadColumnStyle(GridView view) { foreach (GridColumn col in view.Columns) { if (col.OptionsColumn.AllowEdit) continue; //col.AppearanceCell.BackColor = Color.FromName(SystemConfig.CurrentConfig.GridReadOnlyColorName); col.AppearanceCell.ForeColor = Color.FromName("Black"); col.AppearanceCell.Options.UseBackColor = true; col.AppearanceCell.Options.UseForeColor = true; } } /// /// 设置Column.LookupEdit(属性为ColumnEdit)控件参数 /// /// RepositoryItemLookUpEdit组件 public static void SetLookupEditLayout( RepositoryItemLookUpEdit propLookUpEdit) { if (propLookUpEdit == null) return; propLookUpEdit.ImmediatePopup = false; propLookUpEdit.ShowHeader = true; propLookUpEdit.ShowPopupShadow = true; propLookUpEdit.NullText = ""; propLookUpEdit.TextEditStyle = TextEditStyles.Standard; } /// /// 设置明细表格布局. OptionsView,OptionsCustomization设置 /// /// GridView /// 是否可编辑,控制OptionsBehavior.Editable属性 public static void SetSummaryGridViewLayout(GridView gridView, bool editable = false) { gridView.GridControl.BeginInit(); gridView.PaintStyleName = "Skin"; gridView.OptionsBehavior.Editable = editable; gridView.OptionsSelection.EnableAppearanceFocusedRow = true; gridView.OptionsSelection.EnableAppearanceFocusedCell = false; gridView.OptionsView.ShowFooter = true; gridView.OptionsView.ShowGroupPanel = true; gridView.OptionsView.ColumnAutoWidth = false; gridView.OptionsView.RowAutoHeight = false; gridView.ColumnPanelRowHeight = DEF_COLUMN_HEADER_HEIGHT; gridView.RowHeight = DEF_ROW_HEIGHT; //gridView.Appearance.OddRow.Options.UseBackColor = SystemConfig.CurrentConfig.GridAllowOddColor; //gridView.Appearance.OddRow.BackColor = System.Drawing.Color.FromName(SystemConfig.CurrentConfig.GridOddColorName); gridView.GridControl.EndInit(); gridView.CustomDrawEmptyForeground += GridView_CustomDrawEmptyForeground; } /// /// 设置TreeList组件为只读,用于选择资料 /// /// TreeList组件 public static void SetTreeListSelectStyle(TreeList tree) { tree.Appearance.Empty.BackColor = Color.WhiteSmoke; tree.Appearance.Empty.Options.UseBackColor = true; tree.Appearance.Row.BackColor = Color.WhiteSmoke; tree.Appearance.Row.Options.UseBackColor = true; //Appearance.HideSelectionRow tree.Appearance.HideSelectionRow.BackColor = Color.FromArgb(255, 224, 192); tree.Appearance.HideSelectionRow.ForeColor = Color.FromArgb(192, 0, 0); tree.Appearance.HideSelectionRow.Options.UseBackColor = true; tree.Appearance.HideSelectionRow.Options.UseForeColor = true; //Appearance.SelectedRow tree.Appearance.SelectedRow.BackColor = Color.FromArgb(255, 224, 192); tree.Appearance.SelectedRow.ForeColor = Color.Red; tree.Appearance.SelectedRow.Options.UseBackColor = true; tree.Appearance.SelectedRow.Options.UseForeColor = true; //Options tree.OptionsBehavior.Editable = false; tree.OptionsSelection.EnableAppearanceFocusedCell = false; tree.OptionsView.ShowHorzLines = false; tree.OptionsView.ShowVertLines = false; tree.TreeLineStyle = LineStyle.Percent50; tree.OptionsView.ShowRoot = true; tree.LookAndFeel.UseDefaultLookAndFeel = false; tree.LookAndFeel.UseWindowsXPTheme = true; } } }