#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;
}
}
}