当前位置:健康减肥瘦身 > 美容护肤 > 控件使用涉世总计

控件使用涉世总计

文章作者:美容护肤 上传时间:2019-12-21

View Code

图片 1

图片 2

View Code

一.换肤成效

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
    }
}
/// <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);
        }
    }
}

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

  4. 加多 GridView 方法 Click ,剖断全选框是还是不是被点击,若有则重绘全数复选框

 

  2. 身体发肤注册

  5. 效果如下

图片 3图片 4

图片 5图片 6

View Code

/// <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));
        }        
    }
}
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);
        }

    }
}

  1. 一连 GridView ,自定义表格 GridViewSummary,改换Grid父级调控器

图片 7图片 8

View Code

  3. 合计行的单元格对象

图片 9图片 10

图片 11图片 12

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

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

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

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

图片 13图片 14

/// <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]);
    }        
}

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

/// <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

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

图片 15

View Code

View Code

  2. 职能如下图

 

  2. GridViewSummary 所属的父级调整器,创立合计行

  3. 加载四肢列表,调用 SkinTools.LoadSkinList 函数

  3. 意义如下

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

/// <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);
    }
}

图片 16图片 17

  1. 增添 DevExpress.OfficeSkins 和 DevExpress.BonusSkins 四个援用

  1. 创造  复选框列(check卡塔尔(英语:State of Qatar)

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;//还原之前是否可以多选状态
        }
    }
}
DevExpress.UserSkins.BonusSkins.Register();
DevExpress.Skins.SkinManager.EnableFormSkins();

View Code

 

  4. 效果如下图

  1. 添加 GridView 方法 CustomDrawRowIndicator

二. Grid 突显行号以致安装行号列名称

三. Grid 下增添固定合计行

图片 18图片 19

图片 20

View Code

图片 21图片 22

图片 23

View Code

图片 24图片 25

本文由健康减肥瘦身发布于美容护肤,转载请注明出处:控件使用涉世总计

关键词: