一.换肤效果

一.换肤效果

  1. 加加 DevExpress.OfficeSkins 和 DevExpress.BonusSkins 两个援

  1. 补加 DevExpress.OfficeSkins 和 DevExpress.BonusSkins 两只援

  2. 皮注册

  2. 肌肤注册

澳门蒲京娱乐 1澳门蒲京娱乐 2

澳门蒲京娱乐 3澳门蒲京娱乐 4

DevExpress.UserSkins.BonusSkins.Register();
DevExpress.Skins.SkinManager.EnableFormSkins();
DevExpress.UserSkins.BonusSkins.Register();
DevExpress.Skins.SkinManager.EnableFormSkins();

View Code

View Code

  3. 加载皮肤列表,调用 SkinTools.LoadSkinList 函数

  3. 加载皮肤列表,调用 SkinTools.LoadSkinList 函数

澳门蒲京娱乐 5澳门蒲京娱乐 6

澳门蒲京娱乐 7澳门蒲京娱乐 8

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using psi.Common;
using psi.Interfaces;
using DevExpress.Skins;
using DevExpress.LookAndFeel;

/************************************************************************* 
 * 程序说明: 设置皮肤工具
 **************************************************************************/
namespace psi.Library
{
    /// <summary>
    /// 设置皮肤工具
    /// </summary>
    public class SkinTools
    {
        private static ToolStripMenuItem _CurrentSkinList = null;

        /// <summary>
        /// 加载皮肤列表
        /// </summary>
        public static void LoadSkinList(ToolStripMenuItem owner)
        {
            _CurrentSkinList = owner;

            int skinCount = DevExpress.Skins.SkinManager.Default.Skins.Count;
            ToolStripItem[] itemArr = new ToolStripItem[skinCount];
            int index = 0;
            foreach (DevExpress.Skins.SkinContainer skin in DevExpress.Skins.SkinManager.Default.Skins)
            {
                ToolStripMenuItem item = new ToolStripMenuItem();
                item.Text = skin.SkinName;
                item.Name = skin.SkinName;
                item.Checked = skin.SkinName == SystemConfig.CurrentConfig.SkinName;
                item.Click += new System.EventHandler(OnSetSkinClick);
                itemArr[index] = item;
                ++index;
            }

            owner.DropDownItems.AddRange(itemArr);
        }

        /// <summary>
        /// 设置皮肤
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void OnSetSkinClick(object sender, EventArgs e)
        {
            ToolStripMenuItem clickItem = sender as ToolStripMenuItem;
            SetSkin(clickItem.Name);

            if (_CurrentSkinList != null)
            {
                foreach (ToolStripMenuItem item in _CurrentSkinList.DropDownItems)
                {
                    item.Checked = false;
                }
            }

            clickItem.Checked = true;
        }

        public static void SetSkin(string skinName)
        {
            //设置所有窗体的皮肤
            for (int i = 0; i < Application.OpenForms.Count - 1; i++)
            {
                Form form = Application.OpenForms[i];

                if (form is IFormBase) (form as IFormBase).SetSkin(skinName);
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using psi.Common;
using psi.Interfaces;
using DevExpress.Skins;
using DevExpress.LookAndFeel;

/************************************************************************* 
 * 程序说明: 设置皮肤工具
 **************************************************************************/
namespace psi.Library
{
    /// <summary>
    /// 设置皮肤工具
    /// </summary>
    public class SkinTools
    {
        private static ToolStripMenuItem _CurrentSkinList = null;

        /// <summary>
        /// 加载皮肤列表
        /// </summary>
        public static void LoadSkinList(ToolStripMenuItem owner)
        {
            _CurrentSkinList = owner;

            int skinCount = DevExpress.Skins.SkinManager.Default.Skins.Count;
            ToolStripItem[] itemArr = new ToolStripItem[skinCount];
            int index = 0;
            foreach (DevExpress.Skins.SkinContainer skin in DevExpress.Skins.SkinManager.Default.Skins)
            {
                ToolStripMenuItem item = new ToolStripMenuItem();
                item.Text = skin.SkinName;
                item.Name = skin.SkinName;
                item.Checked = skin.SkinName == SystemConfig.CurrentConfig.SkinName;
                item.Click += new System.EventHandler(OnSetSkinClick);
                itemArr[index] = item;
                ++index;
            }

            owner.DropDownItems.AddRange(itemArr);
        }

        /// <summary>
        /// 设置皮肤
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void OnSetSkinClick(object sender, EventArgs e)
        {
            ToolStripMenuItem clickItem = sender as ToolStripMenuItem;
            SetSkin(clickItem.Name);

            if (_CurrentSkinList != null)
            {
                foreach (ToolStripMenuItem item in _CurrentSkinList.DropDownItems)
                {
                    item.Checked = false;
                }
            }

            clickItem.Checked = true;
        }

        public static void SetSkin(string skinName)
        {
            //设置所有窗体的皮肤
            for (int i = 0; i < Application.OpenForms.Count - 1; i++)
            {
                Form form = Application.OpenForms[i];

                if (form is IFormBase) (form as IFormBase).SetSkin(skinName);
            }
        }
    }
}

View Code

View Code

  4. 效果使下图

  4. 效果使下图

澳门蒲京娱乐 9

澳门蒲京娱乐 10

 

 

二. Grid 显示行号以及安装行号列名称

二. Grid 显示行号以及安装行号列名称

  1. 添加 GridView 方法 CustomDrawRowIndicator

  1. 添加 GridView 方法 CustomDrawRowIndicator

澳门蒲京娱乐 11澳门蒲京娱乐 12

澳门蒲京娱乐 13澳门蒲京娱乐 14

/// <summary>
/// 显示行号和设置行号列头部的字符
/// </summary>
private void gvSummary_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
    if (e.Info.Kind == DevExpress.Utils.Drawing.IndicatorKind.Header)
    {
        e.Info.DisplayText = "行号";
    }
    e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    if (e.Info.IsRowIndicator && e.RowHandle >= 0)
    {
        e.Info.DisplayText = Convert.ToString(e.RowHandle + 1);
    }
}
/// <summary>
/// 显示行号和设置行号列头部的字符
/// </summary>
private void gvSummary_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
    if (e.Info.Kind == DevExpress.Utils.Drawing.IndicatorKind.Header)
    {
        e.Info.DisplayText = "行号";
    }
    e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
    if (e.Info.IsRowIndicator && e.RowHandle >= 0)
    {
        e.Info.DisplayText = Convert.ToString(e.RowHandle + 1);
    }
}

View Code

View Code

  2. 效果使下图

  2. 成效使下图

澳门蒲京娱乐 15

澳门蒲京娱乐 16

 

 

三. Grid 下补充加固定合计行

三. Grid 下上加固定合计行

  1. 蝉联 GridView ,自定义表格 GridViewSummary,改变Grid父级控制器

  1. 累 GridView ,自定义表格 GridViewSummary,改变Grid父级控制器

澳门蒲京娱乐 17澳门蒲京娱乐 18

澳门蒲京娱乐 19澳门蒲京娱乐 20

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Columns;
using System.Windows.Forms;
using DevExpress.Skins;
using DevExpress.LookAndFeel;
using System.Drawing;
using DevExpress.XtraGrid;
using System.Collections;

namespace psi.UserControls.SummaryDataGrid
{
    public partial class GridViewSummary : GridView
    {
        #region Browsable properties

        /// <summary>
        /// 是否显示合计行的头部
        /// </summary>
        private bool displaySumRowHeader;
        [Browsable(true), Category("Summary")]
        public bool DisplaySumRowHeader
        {
            get { return displaySumRowHeader; }
            set { displaySumRowHeader = value; }
        }

        /// <summary>
        /// 合计行头部文本
        /// </summary>
        private string sumRowHeaderText;
        [Browsable(true), Category("Summary")]
        public string SumRowHeaderText
        {
            get { return sumRowHeaderText; }
            set { sumRowHeaderText = value; }
        }

        /// <summary>
        /// 合计行头部是否加粗
        /// </summary>
        private bool sumRowHeaderTextBold;
        [Browsable(true), Category("Summary")]
        public bool SumRowHeaderTextBold
        {
            get { return sumRowHeaderTextBold; }
            set { sumRowHeaderTextBold = value; }
        }

        /// <summary>
        /// 需要合计列的列名数组
        /// </summary>
        private string[] summaryColumns;
        [Browsable(true), Category("Summary")]
        public string[] SummaryColumns
        {
            get { return summaryColumns; }
            set { summaryColumns = value; }
        }

        /// <summary>
        /// 合并的列的集合
        /// </summary>
        private List<MergeColumn> mergeColumns = new List<MergeColumn>();
        [Browsable(true), Category("Summary")]
        [TypeConverter(typeof(System.ComponentModel.CollectionConverter))]       
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public List<MergeColumn> MergeColumns
        {
            get { return mergeColumns; }
        }
        #endregion

        #region Declare variables

        private SummaryControlContainer summaryControl;
        private Panel parentPanel;

        public SummaryControlContainer SummaryControl
        {
            get{return this.summaryControl;}
        }
        #endregion

        #region Constructor

        public GridViewSummary()
        {
            InitializeComponent();

            this.parentPanel = new Panel();
            summaryControl = new SummaryControlContainer(this);
        }

        #endregion

        /// <summary>
        /// 改变合计列的皮肤样式,使适应DevExpress的皮肤
        /// </summary>
        private void ChangeSummarySkin()
        {
            if (!DesignMode && this.summaryControl != null)
            {
                //Skin CommonSkin = CommonSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);
                Skin GridSkin = GridSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);
                this.summaryControl.BackColor = GridSkin[GridSkins.SkinGridEvenRow].Color.BackColor;
            }
        }

        /// <summary>
        /// 改变Grid所属的父级控件
        /// </summary>
        private void ChangeParent()
        {
            Control parent = this.GridControl.Parent;
            if (!DesignMode && parent != null)
            {
                gridOldWidth = GridControl.Width;

                summaryControl.InitialHeight = this.RowHeight + 2;
                summaryControl.ForeColor = Color.Transparent;
                summaryControl.Height = summaryControl.InitialHeight;

                this.parentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                this.parentPanel.Dock = DockStyle.Top;
                Size panelSize = new Size();
                panelSize.Height = this.GridControl.Height + summaryControl.InitialHeight;
                this.parentPanel.Size = panelSize;

                summaryControl.Dock = DockStyle.Bottom;

                int controlIdx = parent.Controls.GetChildIndex(this.GridControl);
                parent.Controls.Remove(this.GridControl);

                this.GridControl.Location = new Point(0, 0);
                this.GridControl.SizeChanged += delegate(object sender, EventArgs e)
                {
                    GridControl obj = (GridControl)sender;
                    if (obj.Width != gridOldWidth)
                    {
                        AdjustColumnWidth();
                        summaryControl.resizeSumBoxes();
                        gridOldWidth = obj.Width;
                    }
                };

                this.parentPanel.Controls.Add(this.GridControl);
                this.parentPanel.Controls.Add(summaryControl);
                this.parentPanel.SizeChanged += delegate(object sender, EventArgs e)
                {
                    if (Program.HomeForm.WindowState != FormWindowState.Minimized)
                    {
                        Panel obj = (Panel)sender;
                        if (obj.Width != 0 && obj.Width != GridControl.Width)
                        {
                            gridOldWidth = GridControl.Width;
                            GridControl.Width = obj.Width;
                        }
                    }
                };
                parent.Controls.Add(parentPanel);
                parent.Controls.SetChildIndex(parentPanel, controlIdx);
            }
        }

        /// <summary>
        /// 取得所有显示的列
        /// </summary>
        public List<GridColumn> DisaplyColumns
        {
            get
            {
                List<GridColumn> result = new List<GridColumn>();
                GridColumnCollection columns = this.Columns;
                if (columns == null)
                    return result;
                foreach (GridColumn column in columns)
                {
                    if (column.Visible)
                        result.Add(column);
                }

                return result;
            }
        }

        public delegate void BeforeEndInitHandler();
        public event BeforeEndInitHandler BeforeEndInit;   

        public override void EndInit()
        {
            if (BeforeEndInit != null) BeforeEndInit();
            ChangeSummarySkin();
            ChangeParent();
            summaryControl.reCreateSumBoxes();
        }

        protected override void OnLookAndFeelChanged()
        {
            base.OnLookAndFeelChanged();

            ChangeSummarySkin();
            summaryControl.reCreateSumBoxes();
        }

        private int gridOldWidth;

        /// 手动处理列宽度
        public delegate void HandlerColumnWidth(GridColumn column, int maxWidth);
        public event HandlerColumnWidth ColumnWidthHandler;

        /// 不进行宽度调整的列
        public delegate List<GridColumn> ExcludeAdjustWidthColumns();
        public event ExcludeAdjustWidthColumns ExcludeAdjustColumns;

        /// <summary>
        /// 调整列宽度
        /// </summary>
        public void AdjustColumnWidth()
        {
            Control parent = this.GridControl.Parent;
            if (!DesignMode && parent != null)
            {
                int gridWidth = this.GridControl.Width;
                int columnsWidth = this.IndicatorWidth + 18;
                int count = 0;
                foreach (GridColumn column in DisaplyColumns)
                {
                    if (ExcludeAdjustColumns != null)
                    {
                        List<GridColumn> excludeColumns = ExcludeAdjustColumns();
                        if (excludeColumns != null && excludeColumns.Contains(column))
                        {
                            continue;
                        }
                    }
                    count++;
                    column.Width = (column.Width * gridWidth) / gridOldWidth;
                    if (ColumnWidthHandler != null) ColumnWidthHandler(column, gridWidth - columnsWidth);

                    columnsWidth += column.Width;                 
                }
            }   
        }

        /// <summary>
        /// 删除全部行
        /// </summary>
        public void ClearRows()
        {
            bool _mutilSelected = this.OptionsSelection.MultiSelect;//获取当前是否可以多选
            if (!_mutilSelected)
                this.OptionsSelection.MultiSelect = true;
            this.SelectAll();
            this.DeleteSelectedRows();
            this.OptionsSelection.MultiSelect = _mutilSelected;//还原之前是否可以多选状态
        }
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Columns;
using System.Windows.Forms;
using DevExpress.Skins;
using DevExpress.LookAndFeel;
using System.Drawing;
using DevExpress.XtraGrid;
using System.Collections;

namespace psi.UserControls.SummaryDataGrid
{
    public partial class GridViewSummary : GridView
    {
        #region Browsable properties

        /// <summary>
        /// 是否显示合计行的头部
        /// </summary>
        private bool displaySumRowHeader;
        [Browsable(true), Category("Summary")]
        public bool DisplaySumRowHeader
        {
            get { return displaySumRowHeader; }
            set { displaySumRowHeader = value; }
        }

        /// <summary>
        /// 合计行头部文本
        /// </summary>
        private string sumRowHeaderText;
        [Browsable(true), Category("Summary")]
        public string SumRowHeaderText
        {
            get { return sumRowHeaderText; }
            set { sumRowHeaderText = value; }
        }

        /// <summary>
        /// 合计行头部是否加粗
        /// </summary>
        private bool sumRowHeaderTextBold;
        [Browsable(true), Category("Summary")]
        public bool SumRowHeaderTextBold
        {
            get { return sumRowHeaderTextBold; }
            set { sumRowHeaderTextBold = value; }
        }

        /// <summary>
        /// 需要合计列的列名数组
        /// </summary>
        private string[] summaryColumns;
        [Browsable(true), Category("Summary")]
        public string[] SummaryColumns
        {
            get { return summaryColumns; }
            set { summaryColumns = value; }
        }

        /// <summary>
        /// 合并的列的集合
        /// </summary>
        private List<MergeColumn> mergeColumns = new List<MergeColumn>();
        [Browsable(true), Category("Summary")]
        [TypeConverter(typeof(System.ComponentModel.CollectionConverter))]       
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public List<MergeColumn> MergeColumns
        {
            get { return mergeColumns; }
        }
        #endregion

        #region Declare variables

        private SummaryControlContainer summaryControl;
        private Panel parentPanel;

        public SummaryControlContainer SummaryControl
        {
            get{return this.summaryControl;}
        }
        #endregion

        #region Constructor

        public GridViewSummary()
        {
            InitializeComponent();

            this.parentPanel = new Panel();
            summaryControl = new SummaryControlContainer(this);
        }

        #endregion

        /// <summary>
        /// 改变合计列的皮肤样式,使适应DevExpress的皮肤
        /// </summary>
        private void ChangeSummarySkin()
        {
            if (!DesignMode && this.summaryControl != null)
            {
                //Skin CommonSkin = CommonSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);
                Skin GridSkin = GridSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);
                this.summaryControl.BackColor = GridSkin[GridSkins.SkinGridEvenRow].Color.BackColor;
            }
        }

        /// <summary>
        /// 改变Grid所属的父级控件
        /// </summary>
        private void ChangeParent()
        {
            Control parent = this.GridControl.Parent;
            if (!DesignMode && parent != null)
            {
                gridOldWidth = GridControl.Width;

                summaryControl.InitialHeight = this.RowHeight + 2;
                summaryControl.ForeColor = Color.Transparent;
                summaryControl.Height = summaryControl.InitialHeight;

                this.parentPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                this.parentPanel.Dock = DockStyle.Top;
                Size panelSize = new Size();
                panelSize.Height = this.GridControl.Height + summaryControl.InitialHeight;
                this.parentPanel.Size = panelSize;

                summaryControl.Dock = DockStyle.Bottom;

                int controlIdx = parent.Controls.GetChildIndex(this.GridControl);
                parent.Controls.Remove(this.GridControl);

                this.GridControl.Location = new Point(0, 0);
                this.GridControl.SizeChanged += delegate(object sender, EventArgs e)
                {
                    GridControl obj = (GridControl)sender;
                    if (obj.Width != gridOldWidth)
                    {
                        AdjustColumnWidth();
                        summaryControl.resizeSumBoxes();
                        gridOldWidth = obj.Width;
                    }
                };

                this.parentPanel.Controls.Add(this.GridControl);
                this.parentPanel.Controls.Add(summaryControl);
                this.parentPanel.SizeChanged += delegate(object sender, EventArgs e)
                {
                    if (Program.HomeForm.WindowState != FormWindowState.Minimized)
                    {
                        Panel obj = (Panel)sender;
                        if (obj.Width != 0 && obj.Width != GridControl.Width)
                        {
                            gridOldWidth = GridControl.Width;
                            GridControl.Width = obj.Width;
                        }
                    }
                };
                parent.Controls.Add(parentPanel);
                parent.Controls.SetChildIndex(parentPanel, controlIdx);
            }
        }

        /// <summary>
        /// 取得所有显示的列
        /// </summary>
        public List<GridColumn> DisaplyColumns
        {
            get
            {
                List<GridColumn> result = new List<GridColumn>();
                GridColumnCollection columns = this.Columns;
                if (columns == null)
                    return result;
                foreach (GridColumn column in columns)
                {
                    if (column.Visible)
                        result.Add(column);
                }

                return result;
            }
        }

        public delegate void BeforeEndInitHandler();
        public event BeforeEndInitHandler BeforeEndInit;   

        public override void EndInit()
        {
            if (BeforeEndInit != null) BeforeEndInit();
            ChangeSummarySkin();
            ChangeParent();
            summaryControl.reCreateSumBoxes();
        }

        protected override void OnLookAndFeelChanged()
        {
            base.OnLookAndFeelChanged();

            ChangeSummarySkin();
            summaryControl.reCreateSumBoxes();
        }

        private int gridOldWidth;

        /// 手动处理列宽度
        public delegate void HandlerColumnWidth(GridColumn column, int maxWidth);
        public event HandlerColumnWidth ColumnWidthHandler;

        /// 不进行宽度调整的列
        public delegate List<GridColumn> ExcludeAdjustWidthColumns();
        public event ExcludeAdjustWidthColumns ExcludeAdjustColumns;

        /// <summary>
        /// 调整列宽度
        /// </summary>
        public void AdjustColumnWidth()
        {
            Control parent = this.GridControl.Parent;
            if (!DesignMode && parent != null)
            {
                int gridWidth = this.GridControl.Width;
                int columnsWidth = this.IndicatorWidth + 18;
                int count = 0;
                foreach (GridColumn column in DisaplyColumns)
                {
                    if (ExcludeAdjustColumns != null)
                    {
                        List<GridColumn> excludeColumns = ExcludeAdjustColumns();
                        if (excludeColumns != null && excludeColumns.Contains(column))
                        {
                            continue;
                        }
                    }
                    count++;
                    column.Width = (column.Width * gridWidth) / gridOldWidth;
                    if (ColumnWidthHandler != null) ColumnWidthHandler(column, gridWidth - columnsWidth);

                    columnsWidth += column.Width;                 
                }
            }   
        }

        /// <summary>
        /// 删除全部行
        /// </summary>
        public void ClearRows()
        {
            bool _mutilSelected = this.OptionsSelection.MultiSelect;//获取当前是否可以多选
            if (!_mutilSelected)
                this.OptionsSelection.MultiSelect = true;
            this.SelectAll();
            this.DeleteSelectedRows();
            this.OptionsSelection.MultiSelect = _mutilSelected;//还原之前是否可以多选状态
        }
    }
}

View Code

View Code

  2. GridViewSummary 所属之父级控制器,创建同计行

  2. GridViewSummary 所属之父级控制器,创建同计行

澳门蒲京娱乐 21澳门蒲京娱乐 22

澳门蒲京娱乐 23澳门蒲京娱乐 24

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using DevExpress.XtraGrid;
using System.Drawing;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Columns;
using DevExpress.Skins;
using DevExpress.LookAndFeel;
using System.Data;

namespace psi.UserControls.SummaryDataGrid
{
    public class SummaryControlContainer : UserControl
    {
        #region Declare variables
        private Hashtable sumBoxHash;
        private GridViewSummary gridViewSummary;
        private Label sumRowHeaderLabel;

        private int initialHeight;
        public int InitialHeight
        {
            get { return initialHeight; }
            set { initialHeight = value; }
        }

        public Hashtable SumBoxHash
        {
            get { return this.sumBoxHash; }
        }

        #endregion

        #region Constructors

        public SummaryControlContainer(GridViewSummary gridViewSummary)
        {
            if (gridViewSummary == null)
                throw new Exception("GridViewSummary is null!");

            this.gridViewSummary = gridViewSummary;
            sumBoxHash = new Hashtable();
            sumRowHeaderLabel = new Label();
        }

        #endregion

        #region Functions

        /// <summary>
        /// Checks if passed object is of type of integer
        /// </summary>
        /// <param name="o">object</param>
        /// <returns>true/ false</returns>
        protected bool IsInteger(object o)
        {
            if (o is Int64)
                return true;
            if (o is Int32)
                return true;
            if (o is Int16)
                return true;
            return false;
        }

        /// <summary>
        /// Checks if passed object is of type of decimal/ double
        /// </summary>
        /// <param name="o">object</param>
        /// <returns>true/ false</returns>
        protected bool IsDecimal(object o)
        {
            if (o is Decimal)
                return true;
            if (o is Single)
                return true;
            if (o is Double)
                return true;
            return false;
        }

        /// <summary>
        /// Create summary boxes for each Column of the DataGridView        
        /// </summary>
        public void reCreateSumBoxes()
        {
            ReadOnlyTextBox sumBox;
            Skin GridSkin = GridSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);
            Skin CommonSkin = CommonSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);

            foreach (Control control in sumBoxHash.Values)
            {
                this.Controls.Remove(control);
            }

            int iCnt = 0;

            List<GridColumn> gridColumns = this.gridViewSummary.DisaplyColumns;
            foreach (GridColumn gridColumn in gridColumns)
            {
                sumBox = new ReadOnlyTextBox();
                sumBox.Top = 0;
                sumBox.Height = this.initialHeight;
                sumBox.BorderColor = GridSkin[GridSkins.SkinGridLine].Color.BackColor;
                sumBox.Font = this.gridViewSummary.GridControl.Font;
                sumBox.ForeColor = this.gridViewSummary.GridControl.ForeColor;
                iCnt++;

                bool isMergeColumn = false;
                foreach (MergeColumn mergeColumn in this.gridViewSummary.MergeColumns)
                {
                    if (gridColumn.VisibleIndex >= mergeColumn.StartIndex && gridColumn.VisibleIndex <= mergeColumn.EndIndex)
                    {
                        isMergeColumn = true;

                        if (gridColumn.VisibleIndex == mergeColumn.StartIndex)
                        {
                            if (gridColumns.Count == iCnt + (mergeColumn.EndIndex - mergeColumn.StartIndex + 1))
                            {
                                sumBox.IsLastColumn = true;
                            }
                            if (sumBoxHash.ContainsKey(mergeColumn.ColumnName))
                            {
                                ReadOnlyTextBox textBox = (ReadOnlyTextBox)sumBoxHash[mergeColumn.ColumnName];
                                sumBox.Text = textBox.Text;
                                sumBoxHash.Remove(mergeColumn.ColumnName);
                            }
                            sumBoxHash.Add(mergeColumn.ColumnName, sumBox);
                            this.Controls.Add(sumBox);
                        }
                        break;
                    }
                }
                if (isMergeColumn)
                    continue;


                if (gridColumns.Count == iCnt)
                    sumBox.IsLastColumn = true;

                if(sumBoxHash.ContainsKey(gridColumn.Name))
                {
                    ReadOnlyTextBox textBox = (ReadOnlyTextBox)sumBoxHash[gridColumn.Name];
                    sumBox.Text = textBox.Text;
                    sumBoxHash.Remove(gridColumn.Name);
                }
                sumBoxHash.Add(gridColumn.Name, sumBox);

                if (gridViewSummary.SummaryColumns != null && gridViewSummary.SummaryColumns.Length > 0)
                {
                    for (int iCntX = 0; iCntX < gridViewSummary.SummaryColumns.Length; iCntX++)
                    {
                        if (gridViewSummary.SummaryColumns[iCntX] == gridColumn.Name)
                        {
                            sumBox.TextAlign = TextHelper.TranslateGridColumnAligment(gridColumn.AppearanceCell.TextOptions.HAlignment);
                            sumBox.IsSummary = true;

                            sumBox.FormatString = gridColumn.DisplayFormat.FormatString;
                            if (gridColumn.ColumnType == typeof(System.Int32) || gridColumn.ColumnType == typeof(System.Int16) ||
                                gridColumn.ColumnType == typeof(System.Int64) || gridColumn.ColumnType == typeof(System.Single) ||
                                gridColumn.ColumnType == typeof(System.Double) || gridColumn.ColumnType == typeof(System.Single) ||
                                gridColumn.ColumnType == typeof(System.Decimal))
                                sumBox.Tag = System.Activator.CreateInstance(gridColumn.ColumnType);

                            break;
                        }
                    }
                }

                this.Controls.Add(sumBox);
            }

            if (gridViewSummary.DisplaySumRowHeader)
            {
                sumRowHeaderLabel.Width = this.gridViewSummary.IndicatorWidth;
                sumRowHeaderLabel.Font = new Font(this.gridViewSummary.GridControl.Font, this.gridViewSummary.SumRowHeaderTextBold ? FontStyle.Bold : FontStyle.Regular);
                sumRowHeaderLabel.Anchor = AnchorStyles.Left;
                sumRowHeaderLabel.TextAlign = ContentAlignment.MiddleCenter;
                sumRowHeaderLabel.Height = sumRowHeaderLabel.Font.Height;
                sumRowHeaderLabel.Top = Convert.ToInt32(Convert.ToDouble(this.InitialHeight - sumRowHeaderLabel.Height) / 2F);
                sumRowHeaderLabel.Text = gridViewSummary.SumRowHeaderText;

                sumRowHeaderLabel.ForeColor = this.gridViewSummary.GridControl.ForeColor;
                sumRowHeaderLabel.Margin = new Padding(0);
                sumRowHeaderLabel.Padding = new Padding(0);

                this.Controls.Add(sumRowHeaderLabel);
            }
            resizeSumBoxes();
        }

         /// <summary>
        /// Resize the text Boxes depending on the 
        /// width of the Columns of the GridView
        /// </summary>
        public void resizeSumBoxes()
        {
            this.SuspendLayout();
            if (sumBoxHash.Count > 0)
                try
                {
                    int rowHeaderWidth = gridViewSummary.OptionsView.ShowIndicator ? gridViewSummary.IndicatorWidth - 1: 0;
                    int curPos = rowHeaderWidth;

                    if (gridViewSummary.DisplaySumRowHeader && rowHeaderWidth > 0)
                    {
                        sumRowHeaderLabel.Dock = DockStyle.Left;
                    }
                    else
                    {
                        if (sumRowHeaderLabel.Visible)
                            sumRowHeaderLabel.Visible = false;
                    }

                    Rectangle oldBounds;
                    List<GridColumn> gridColumns = this.gridViewSummary.DisaplyColumns;
                    int mergeColumnWidth = 0;
                    foreach (GridColumn gridColumn in gridColumns)
                    {
                        ReadOnlyTextBox sumBox = null;

                        bool isMergeColumn = false;
                        foreach (MergeColumn mergeColumn in this.gridViewSummary.MergeColumns)
                        {
                            if (gridColumn.VisibleIndex >= mergeColumn.StartIndex && gridColumn.VisibleIndex <= mergeColumn.EndIndex)
                            {
                                isMergeColumn = true;
                                mergeColumnWidth += gridColumn.Width;
                                if (gridColumn.VisibleIndex == mergeColumn.EndIndex)
                                {
                                    sumBox = (ReadOnlyTextBox)sumBoxHash[mergeColumn.ColumnName];
                                    if (sumBox != null)
                                    {
                                        oldBounds = sumBox.Bounds;

                                        sumBox.SetBounds(curPos, 0, mergeColumnWidth, 0, BoundsSpecified.X | BoundsSpecified.Width);

                                        if (!sumBox.Visible)
                                            sumBox.Visible = true;

                                        if (oldBounds != sumBox.Bounds)
                                            sumBox.Invalidate();

                                        curPos += mergeColumnWidth;
                                        mergeColumnWidth = 0;
                                    }
                                }
                            }
                        }
                        if (isMergeColumn)
                            continue;

                        sumBox = (ReadOnlyTextBox)sumBoxHash[gridColumn.Name];
                        if (sumBox != null)
                        {
                            oldBounds = sumBox.Bounds;

                            sumBox.SetBounds(curPos, 0, gridColumn.Width, 0, BoundsSpecified.X | BoundsSpecified.Width);

                            if (!sumBox.Visible)
                                sumBox.Visible = true;

                            if (oldBounds != sumBox.Bounds)
                                sumBox.Invalidate();

                            curPos += gridColumn.Width;
                        }
                    }
                }
                finally
                {
                    this.ResumeLayout();
                }
        }
        #endregion
    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using DevExpress.XtraGrid;
using System.Drawing;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Columns;
using DevExpress.Skins;
using DevExpress.LookAndFeel;
using System.Data;

namespace psi.UserControls.SummaryDataGrid
{
    public class SummaryControlContainer : UserControl
    {
        #region Declare variables
        private Hashtable sumBoxHash;
        private GridViewSummary gridViewSummary;
        private Label sumRowHeaderLabel;

        private int initialHeight;
        public int InitialHeight
        {
            get { return initialHeight; }
            set { initialHeight = value; }
        }

        public Hashtable SumBoxHash
        {
            get { return this.sumBoxHash; }
        }

        #endregion

        #region Constructors

        public SummaryControlContainer(GridViewSummary gridViewSummary)
        {
            if (gridViewSummary == null)
                throw new Exception("GridViewSummary is null!");

            this.gridViewSummary = gridViewSummary;
            sumBoxHash = new Hashtable();
            sumRowHeaderLabel = new Label();
        }

        #endregion

        #region Functions

        /// <summary>
        /// Checks if passed object is of type of integer
        /// </summary>
        /// <param name="o">object</param>
        /// <returns>true/ false</returns>
        protected bool IsInteger(object o)
        {
            if (o is Int64)
                return true;
            if (o is Int32)
                return true;
            if (o is Int16)
                return true;
            return false;
        }

        /// <summary>
        /// Checks if passed object is of type of decimal/ double
        /// </summary>
        /// <param name="o">object</param>
        /// <returns>true/ false</returns>
        protected bool IsDecimal(object o)
        {
            if (o is Decimal)
                return true;
            if (o is Single)
                return true;
            if (o is Double)
                return true;
            return false;
        }

        /// <summary>
        /// Create summary boxes for each Column of the DataGridView        
        /// </summary>
        public void reCreateSumBoxes()
        {
            ReadOnlyTextBox sumBox;
            Skin GridSkin = GridSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);
            Skin CommonSkin = CommonSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel);

            foreach (Control control in sumBoxHash.Values)
            {
                this.Controls.Remove(control);
            }

            int iCnt = 0;

            List<GridColumn> gridColumns = this.gridViewSummary.DisaplyColumns;
            foreach (GridColumn gridColumn in gridColumns)
            {
                sumBox = new ReadOnlyTextBox();
                sumBox.Top = 0;
                sumBox.Height = this.initialHeight;
                sumBox.BorderColor = GridSkin[GridSkins.SkinGridLine].Color.BackColor;
                sumBox.Font = this.gridViewSummary.GridControl.Font;
                sumBox.ForeColor = this.gridViewSummary.GridControl.ForeColor;
                iCnt++;

                bool isMergeColumn = false;
                foreach (MergeColumn mergeColumn in this.gridViewSummary.MergeColumns)
                {
                    if (gridColumn.VisibleIndex >= mergeColumn.StartIndex && gridColumn.VisibleIndex <= mergeColumn.EndIndex)
                    {
                        isMergeColumn = true;

                        if (gridColumn.VisibleIndex == mergeColumn.StartIndex)
                        {
                            if (gridColumns.Count == iCnt + (mergeColumn.EndIndex - mergeColumn.StartIndex + 1))
                            {
                                sumBox.IsLastColumn = true;
                            }
                            if (sumBoxHash.ContainsKey(mergeColumn.ColumnName))
                            {
                                ReadOnlyTextBox textBox = (ReadOnlyTextBox)sumBoxHash[mergeColumn.ColumnName];
                                sumBox.Text = textBox.Text;
                                sumBoxHash.Remove(mergeColumn.ColumnName);
                            }
                            sumBoxHash.Add(mergeColumn.ColumnName, sumBox);
                            this.Controls.Add(sumBox);
                        }
                        break;
                    }
                }
                if (isMergeColumn)
                    continue;


                if (gridColumns.Count == iCnt)
                    sumBox.IsLastColumn = true;

                if(sumBoxHash.ContainsKey(gridColumn.Name))
                {
                    ReadOnlyTextBox textBox = (ReadOnlyTextBox)sumBoxHash[gridColumn.Name];
                    sumBox.Text = textBox.Text;
                    sumBoxHash.Remove(gridColumn.Name);
                }
                sumBoxHash.Add(gridColumn.Name, sumBox);

                if (gridViewSummary.SummaryColumns != null && gridViewSummary.SummaryColumns.Length > 0)
                {
                    for (int iCntX = 0; iCntX < gridViewSummary.SummaryColumns.Length; iCntX++)
                    {
                        if (gridViewSummary.SummaryColumns[iCntX] == gridColumn.Name)
                        {
                            sumBox.TextAlign = TextHelper.TranslateGridColumnAligment(gridColumn.AppearanceCell.TextOptions.HAlignment);
                            sumBox.IsSummary = true;

                            sumBox.FormatString = gridColumn.DisplayFormat.FormatString;
                            if (gridColumn.ColumnType == typeof(System.Int32) || gridColumn.ColumnType == typeof(System.Int16) ||
                                gridColumn.ColumnType == typeof(System.Int64) || gridColumn.ColumnType == typeof(System.Single) ||
                                gridColumn.ColumnType == typeof(System.Double) || gridColumn.ColumnType == typeof(System.Single) ||
                                gridColumn.ColumnType == typeof(System.Decimal))
                                sumBox.Tag = System.Activator.CreateInstance(gridColumn.ColumnType);

                            break;
                        }
                    }
                }

                this.Controls.Add(sumBox);
            }

            if (gridViewSummary.DisplaySumRowHeader)
            {
                sumRowHeaderLabel.Width = this.gridViewSummary.IndicatorWidth;
                sumRowHeaderLabel.Font = new Font(this.gridViewSummary.GridControl.Font, this.gridViewSummary.SumRowHeaderTextBold ? FontStyle.Bold : FontStyle.Regular);
                sumRowHeaderLabel.Anchor = AnchorStyles.Left;
                sumRowHeaderLabel.TextAlign = ContentAlignment.MiddleCenter;
                sumRowHeaderLabel.Height = sumRowHeaderLabel.Font.Height;
                sumRowHeaderLabel.Top = Convert.ToInt32(Convert.ToDouble(this.InitialHeight - sumRowHeaderLabel.Height) / 2F);
                sumRowHeaderLabel.Text = gridViewSummary.SumRowHeaderText;

                sumRowHeaderLabel.ForeColor = this.gridViewSummary.GridControl.ForeColor;
                sumRowHeaderLabel.Margin = new Padding(0);
                sumRowHeaderLabel.Padding = new Padding(0);

                this.Controls.Add(sumRowHeaderLabel);
            }
            resizeSumBoxes();
        }

         /// <summary>
        /// Resize the text Boxes depending on the 
        /// width of the Columns of the GridView
        /// </summary>
        public void resizeSumBoxes()
        {
            this.SuspendLayout();
            if (sumBoxHash.Count > 0)
                try
                {
                    int rowHeaderWidth = gridViewSummary.OptionsView.ShowIndicator ? gridViewSummary.IndicatorWidth - 1: 0;
                    int curPos = rowHeaderWidth;

                    if (gridViewSummary.DisplaySumRowHeader && rowHeaderWidth > 0)
                    {
                        sumRowHeaderLabel.Dock = DockStyle.Left;
                    }
                    else
                    {
                        if (sumRowHeaderLabel.Visible)
                            sumRowHeaderLabel.Visible = false;
                    }

                    Rectangle oldBounds;
                    List<GridColumn> gridColumns = this.gridViewSummary.DisaplyColumns;
                    int mergeColumnWidth = 0;
                    foreach (GridColumn gridColumn in gridColumns)
                    {
                        ReadOnlyTextBox sumBox = null;

                        bool isMergeColumn = false;
                        foreach (MergeColumn mergeColumn in this.gridViewSummary.MergeColumns)
                        {
                            if (gridColumn.VisibleIndex >= mergeColumn.StartIndex && gridColumn.VisibleIndex <= mergeColumn.EndIndex)
                            {
                                isMergeColumn = true;
                                mergeColumnWidth += gridColumn.Width;
                                if (gridColumn.VisibleIndex == mergeColumn.EndIndex)
                                {
                                    sumBox = (ReadOnlyTextBox)sumBoxHash[mergeColumn.ColumnName];
                                    if (sumBox != null)
                                    {
                                        oldBounds = sumBox.Bounds;

                                        sumBox.SetBounds(curPos, 0, mergeColumnWidth, 0, BoundsSpecified.X | BoundsSpecified.Width);

                                        if (!sumBox.Visible)
                                            sumBox.Visible = true;

                                        if (oldBounds != sumBox.Bounds)
                                            sumBox.Invalidate();

                                        curPos += mergeColumnWidth;
                                        mergeColumnWidth = 0;
                                    }
                                }
                            }
                        }
                        if (isMergeColumn)
                            continue;

                        sumBox = (ReadOnlyTextBox)sumBoxHash[gridColumn.Name];
                        if (sumBox != null)
                        {
                            oldBounds = sumBox.Bounds;

                            sumBox.SetBounds(curPos, 0, gridColumn.Width, 0, BoundsSpecified.X | BoundsSpecified.Width);

                            if (!sumBox.Visible)
                                sumBox.Visible = true;

                            if (oldBounds != sumBox.Bounds)
                                sumBox.Invalidate();

                            curPos += gridColumn.Width;
                        }
                    }
                }
                finally
                {
                    this.ResumeLayout();
                }
        }
        #endregion
    }
}

View Code

View Code

  3. 合计行的只有元格对象

  3. 合计行的只是元格对象

澳门蒲京娱乐 25澳门蒲京娱乐 26

澳门蒲京娱乐 27澳门蒲京娱乐 28

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using psi.Common;

namespace psi.UserControls.SummaryDataGrid
{
    public partial class ReadOnlyTextBox : UserControl
    {

        StringFormat format;
        public event EventHandler TextChanged;

        public ReadOnlyTextBox()
        {
            InitializeComponent();

            format = new StringFormat(StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox | StringFormatFlags.MeasureTrailingSpaces);
            format.LineAlignment = StringAlignment.Center;

            this.Height = 10;
            this.Width = 10;

            this.Padding = new Padding(2);
        }

        private Color borderColor = Color.Black;

        private bool isSummary;
        public bool IsSummary
        {
            get { return isSummary; }
            set { isSummary = value; }
        }

        private bool isLastColumn;
        public bool IsLastColumn
        {
            get { return isLastColumn; }
            set { isLastColumn = value; }
        }

        private string formatString;
        public string FormatString
        {
            get { return formatString; }
            set { formatString = value; }
        }


        private HorizontalAlignment textAlign = HorizontalAlignment.Left;
        [DefaultValue(HorizontalAlignment.Left)]
        public HorizontalAlignment TextAlign
        {
            get { return textAlign; }
            set
            {
                textAlign = value;
                setFormatFlags();
            }
        }

        private StringTrimming trimming = StringTrimming.None;
        [DefaultValue(StringTrimming.None)]
        public StringTrimming Trimming
        {
            get { return trimming; }
            set
            {
                trimming = value;
                setFormatFlags();
            }
        }

        private void setFormatFlags()
        {
            format.Alignment = TextHelper.TranslateAligment(TextAlign);
            format.Trimming = trimming;
        }

        public Color BorderColor
        {
            get { return borderColor; }
            set { borderColor = value; }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            int subWidth = 0;
            Rectangle textBounds;

            if (!string.IsNullOrEmpty(formatString) && !string.IsNullOrEmpty(Text))
            {
                decimal num = Convert.ToDecimal(ConvertEx.replaceCurrency(Text));
                if (Text.Contains('%'))
                    num = decimal.Divide(num, 100);
                Text = String.Format("{0:" + formatString + "}", num);
            }

            textBounds = new Rectangle(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width, this.ClientRectangle.Height);
            using (Pen pen = new Pen(borderColor))
            {
                if (isLastColumn)
                    subWidth = 1;

                e.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle);
                e.Graphics.DrawRectangle(pen, this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width - subWidth, this.ClientRectangle.Height);
                e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), textBounds, format);
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            base.OnTextChanged(e);
            if (TextChanged != null)
                TextChanged(this, e);
        }

    }
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using psi.Common;

namespace psi.UserControls.SummaryDataGrid
{
    public partial class ReadOnlyTextBox : UserControl
    {

        StringFormat format;
        public event EventHandler TextChanged;

        public ReadOnlyTextBox()
        {
            InitializeComponent();

            format = new StringFormat(StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox | StringFormatFlags.MeasureTrailingSpaces);
            format.LineAlignment = StringAlignment.Center;

            this.Height = 10;
            this.Width = 10;

            this.Padding = new Padding(2);
        }

        private Color borderColor = Color.Black;

        private bool isSummary;
        public bool IsSummary
        {
            get { return isSummary; }
            set { isSummary = value; }
        }

        private bool isLastColumn;
        public bool IsLastColumn
        {
            get { return isLastColumn; }
            set { isLastColumn = value; }
        }

        private string formatString;
        public string FormatString
        {
            get { return formatString; }
            set { formatString = value; }
        }


        private HorizontalAlignment textAlign = HorizontalAlignment.Left;
        [DefaultValue(HorizontalAlignment.Left)]
        public HorizontalAlignment TextAlign
        {
            get { return textAlign; }
            set
            {
                textAlign = value;
                setFormatFlags();
            }
        }

        private StringTrimming trimming = StringTrimming.None;
        [DefaultValue(StringTrimming.None)]
        public StringTrimming Trimming
        {
            get { return trimming; }
            set
            {
                trimming = value;
                setFormatFlags();
            }
        }

        private void setFormatFlags()
        {
            format.Alignment = TextHelper.TranslateAligment(TextAlign);
            format.Trimming = trimming;
        }

        public Color BorderColor
        {
            get { return borderColor; }
            set { borderColor = value; }
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            int subWidth = 0;
            Rectangle textBounds;

            if (!string.IsNullOrEmpty(formatString) && !string.IsNullOrEmpty(Text))
            {
                decimal num = Convert.ToDecimal(ConvertEx.replaceCurrency(Text));
                if (Text.Contains('%'))
                    num = decimal.Divide(num, 100);
                Text = String.Format("{0:" + formatString + "}", num);
            }

            textBounds = new Rectangle(this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width, this.ClientRectangle.Height);
            using (Pen pen = new Pen(borderColor))
            {
                if (isLastColumn)
                    subWidth = 1;

                e.Graphics.FillRectangle(new SolidBrush(this.BackColor), this.ClientRectangle);
                e.Graphics.DrawRectangle(pen, this.ClientRectangle.X, this.ClientRectangle.Y, this.ClientRectangle.Width - subWidth, this.ClientRectangle.Height);
                e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), textBounds, format);
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            base.OnTextChanged(e);
            if (TextChanged != null)
                TextChanged(this, e);
        }

    }
}

View Code

View Code

  4. 以自定义表格 GridViewSummary,效果如下

  4. 动由定义表格 GridViewSummary,效果如下

澳门蒲京娱乐 29

澳门蒲京娱乐 30

 

 

四. Grid 自定义绘制操作列头

四. Grid 自定义绘制操作列头

  1. 创建  修改列(operate_modify)、删除列(operate_del)

  1. 创建  修改列(operate_modify)、删除列(operate_del)

  2. 补给加 GridView 方法  CustomDrawColumnHeader,绘制表头

  2. 上加 GridView 方法  CustomDrawColumnHeader,绘制表头

澳门蒲京娱乐 31澳门蒲京娱乐 32

澳门蒲京娱乐 33澳门蒲京娱乐 34

/// <summary>
/// 自定义绘制操作列表头
/// </summary>
private void gvDetail_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
{
    if(e.Column != null)
    {
        if (e.Column == operate_modify)
        {
            e.Info.InnerElements.Clear();
            e.Painter.DrawObject(e.Info);
            e.Handled = true;

            int delColumnWidth = operate_del.VisibleWidth;
            e.Graphics.FillRectangle(new SolidBrush(e.Info.Appearance.BackColor), new Rectangle(e.Bounds.X - delColumnWidth + 1, e.Bounds.Y + 1, e.Bounds.Width + delColumnWidth - 2, e.Bounds.Height - 2));
            e.Graphics.DrawString("操作", new Font("宋体", 9f), new SolidBrush(e.Info.Appearance.ForeColor), new Rectangle((e.Bounds.X - delColumnWidth) + (e.Bounds.Width + delColumnWidth) / 2 - 15, e.Bounds.Y + 8, 30, 15));
        }        
    }
}
/// <summary>
/// 自定义绘制操作列表头
/// </summary>
private void gvDetail_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
{
    if(e.Column != null)
    {
        if (e.Column == operate_modify)
        {
            e.Info.InnerElements.Clear();
            e.Painter.DrawObject(e.Info);
            e.Handled = true;

            int delColumnWidth = operate_del.VisibleWidth;
            e.Graphics.FillRectangle(new SolidBrush(e.Info.Appearance.BackColor), new Rectangle(e.Bounds.X - delColumnWidth + 1, e.Bounds.Y + 1, e.Bounds.Width + delColumnWidth - 2, e.Bounds.Height - 2));
            e.Graphics.DrawString("操作", new Font("宋体", 9f), new SolidBrush(e.Info.Appearance.ForeColor), new Rectangle((e.Bounds.X - delColumnWidth) + (e.Bounds.Width + delColumnWidth) / 2 - 15, e.Bounds.Y + 8, 30, 15));
        }        
    }
}

View Code

View Code

  3. 功效如下

  3. 功力如下

澳门蒲京娱乐 35

澳门蒲京娱乐 36

 

 

五. Grid 绘制复选框和咸选框

五. Grid 绘制复选框和全选框

  1. 创建  复选框列(check)

  1. 创办  复选框列(check)

  2. 补给加 GridView 方法 CustomDrawCell,绘制复选框

  2. 补偿加 GridView 方法 CustomDrawCell澳门蒲京娱乐,绘制复选框

澳门蒲京娱乐 37澳门蒲京娱乐 38

澳门蒲京娱乐 39澳门蒲京娱乐 40

/// <summary>
/// 自定义绘制删除、修改单元格
/// </summary>
private void gvDetail_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
    GridView currentView = sender as GridView;
    if (e.Column == check)
    {
        ControlPaint.DrawCheckBox(e.Graphics, new Rectangle(e.Bounds.X + e.Bounds.Width / 2 - 8, e.Bounds.Y + 3, 16, 16), checkBoxState[e.RowHandle]);
    }        
}
/// <summary>
/// 自定义绘制删除、修改单元格
/// </summary>
private void gvDetail_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
    GridView currentView = sender as GridView;
    if (e.Column == check)
    {
        ControlPaint.DrawCheckBox(e.Graphics, new Rectangle(e.Bounds.X + e.Bounds.Width / 2 - 8, e.Bounds.Y + 3, 16, 16), checkBoxState[e.RowHandle]);
    }        
}

View Code

View Code

  3. 续加 GridView 方法 CustomDrawColumnHeader,绘制全选框

  3. 加加 GridView 方法 CustomDrawColumnHeader,绘制全选框

澳门蒲京娱乐 41澳门蒲京娱乐 42

澳门蒲京娱乐 43澳门蒲京娱乐 44

/// <summary>
/// 自定义绘制操作列表头
/// </summary>
private void gvDetail_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
{
    if(e.Column != null)
    {
        if (e.Column == check)
        {
            e.Info.InnerElements.Clear();
            e.Painter.DrawObject(e.Info);
            e.Handled = true;

            ControlPaint.DrawCheckBox(e.Graphics, new Rectangle(e.Bounds.X + e.Bounds.Width / 2 - 8, e.Bounds.Y + 6, 16, 16), allSelectState);
        }
    }
}
/// <summary>
/// 自定义绘制操作列表头
/// </summary>
private void gvDetail_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
{
    if(e.Column != null)
    {
        if (e.Column == check)
        {
            e.Info.InnerElements.Clear();
            e.Painter.DrawObject(e.Info);
            e.Handled = true;

            ControlPaint.DrawCheckBox(e.Graphics, new Rectangle(e.Bounds.X + e.Bounds.Width / 2 - 8, e.Bounds.Y + 6, 16, 16), allSelectState);
        }
    }
}

View Code

View Code

  4. 补加 GridView 方法 Click
,判断全选框是否让点击,若发生则重绘所有复选框

  4. 补给加 GridView 方法 Click
,判断全选框是否受点击,若有则重绘所有复选框

澳门蒲京娱乐 45澳门蒲京娱乐 46

澳门蒲京娱乐 47澳门蒲京娱乐 48

/// <summary>
/// 判断Grid全选框是否被单击
/// </summary>
/// <param name="gridView"></param>
/// <param name="name"></param>
/// <returns></returns>
public bool ClickGridCheckBox(DevExpress.XtraGrid.Views.Grid.GridView gridView, string name)
{
    bool result = false;
    if (gridView != null)
    {
        DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo info;
        Point pt = gridView.GridControl.PointToClient(Control.MousePosition);
        info = gridView.CalcHitInfo(pt);
        if (info.InColumn && info.Column != null && info.Column.Name == name)
        {
            return true;
        }
    }
    return result;
} 


private void gvDetail_Click(object sender, EventArgs e)
{
    if (ClickGridCheckBox(this.gvDetail, "check"))
    {
        allSelectState = allSelectState == ButtonState.Checked ? ButtonState.Normal : ButtonState.Checked;
        selCount = allSelectState == ButtonState.Checked?0:checkBoxState.Count;

        for (int i = 0; i < checkBoxState.Count; i++)
        {
            SetCheckBoxState(i, allSelectState);
        }
    }
}

/// <summary>
/// 重新绘制复选框
/// </summary>
/// <param name="rowHandle"></param>
/// <param name="state"></param>
private void SetCheckBoxState(int rowHandle, ButtonState state)
{
    checkBoxState[rowHandle] = state;
    //获取点击单元格左上角的坐标
    GridViewInfo info = gvDetail.GetViewInfo() as GridViewInfo;
    GridCellInfo cellInfo = info.GetGridCellInfo(rowHandle, check);

    ControlPaint.DrawCheckBox(gcDetail.CreateGraphics(), new Rectangle(cellInfo.Bounds.X + cellInfo.Bounds.Width / 2 - 8, cellInfo.Bounds.Y + 3, 16, 16), state);

}
/// <summary>
/// 判断Grid全选框是否被单击
/// </summary>
/// <param name="gridView"></param>
/// <param name="name"></param>
/// <returns></returns>
public bool ClickGridCheckBox(DevExpress.XtraGrid.Views.Grid.GridView gridView, string name)
{
    bool result = false;
    if (gridView != null)
    {
        DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo info;
        Point pt = gridView.GridControl.PointToClient(Control.MousePosition);
        info = gridView.CalcHitInfo(pt);
        if (info.InColumn && info.Column != null && info.Column.Name == name)
        {
            return true;
        }
    }
    return result;
} 


private void gvDetail_Click(object sender, EventArgs e)
{
    if (ClickGridCheckBox(this.gvDetail, "check"))
    {
        allSelectState = allSelectState == ButtonState.Checked ? ButtonState.Normal : ButtonState.Checked;
        selCount = allSelectState == ButtonState.Checked?0:checkBoxState.Count;

        for (int i = 0; i < checkBoxState.Count; i++)
        {
            SetCheckBoxState(i, allSelectState);
        }
    }
}

/// <summary>
/// 重新绘制复选框
/// </summary>
/// <param name="rowHandle"></param>
/// <param name="state"></param>
private void SetCheckBoxState(int rowHandle, ButtonState state)
{
    checkBoxState[rowHandle] = state;
    //获取点击单元格左上角的坐标
    GridViewInfo info = gvDetail.GetViewInfo() as GridViewInfo;
    GridCellInfo cellInfo = info.GetGridCellInfo(rowHandle, check);

    ControlPaint.DrawCheckBox(gcDetail.CreateGraphics(), new Rectangle(cellInfo.Bounds.X + cellInfo.Bounds.Width / 2 - 8, cellInfo.Bounds.Y + 3, 16, 16), state);

}

View Code

View Code

  5. 效果如下

  5. 效果如下

澳门蒲京娱乐 49

澳门蒲京娱乐 50