DataGridView

来源:互联网 发布:linux用户目前已登录 编辑:程序博客网 时间:2024/06/05 14:57
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;
using DevComponents.DotNetBar.Controls;
using System.Data;

namespace Bn6.Common
{
    /// <summary>
    /// 自定义的DataGridView操作类
    /// </summary>
    public class DgvTools
    {
        #region 创建DataGridView的TextBox列
        /// <summary>
        /// 创建DataGridView的TextBox列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_maxInputLength">可输入的最大长度</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvTextBoxColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, int _maxInputLength, bool _readOnly, bool _visible,
            bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewTextBoxColumn textBoxCol = new DataGridViewTextBoxColumn();
            textBoxCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            textBoxCol.Name = _columnName;
            textBoxCol.HeaderText = _headerText;
            textBoxCol.DataPropertyName = _dataPropertyName;
            textBoxCol.ToolTipText = _toolTipText;
            textBoxCol.MaxInputLength = _maxInputLength;
            textBoxCol.Visible = _visible;
            textBoxCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                textBoxCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(textBoxCol);
        }
        #endregion

        #region 创建DataGridView的扩展的TextBoxDropDown列
        /// <summary>
        /// 创建DataGridView的扩展的TextBoxDropDown列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_maxInputLength">可输入的最大长度</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_buttonCustomVisible">设置是否显示可选择按钮,true 显示,false 隐藏</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvTextBoxDropDownColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, int _maxInputLength, bool _readOnly, bool _visible,
            bool _notEmpty, Color _backColor, bool _buttonCustomVisible, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewTextBoxDropDownColumn textBoxDropDownCol = new DataGridViewTextBoxDropDownColumn();
            textBoxDropDownCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            textBoxDropDownCol.Name = _columnName;
            textBoxDropDownCol.HeaderText = _headerText;
            textBoxDropDownCol.DataPropertyName = _dataPropertyName;
            textBoxDropDownCol.ToolTipText = _toolTipText;
            textBoxDropDownCol.MaxInputLength = _maxInputLength;
            textBoxDropDownCol.Visible = _visible;
            textBoxDropDownCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                textBoxDropDownCol.DefaultCellStyle.BackColor = _backColor;
            }
            textBoxDropDownCol.ButtonCustom.Visible = _buttonCustomVisible;
            //textBoxDropDownCol.ButtonCustom2.Visible = _buttonCustomVisible;
            //textBoxDropDownCol.ButtonClear.Visible = _buttonCustomVisible;
            //textBoxDropDownCol.ButtonDropDown.Visible = _buttonCustomVisible;
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(textBoxDropDownCol);
        }
        #endregion

        #region 创建DataGridView的Button列
        /// <summary>
        /// 创建DataGridView的Button列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvButtonColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, bool _readOnly, bool _visible, bool _notEmpty,
            Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewButtonColumn buttonCol = new DataGridViewButtonColumn();
            buttonCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            buttonCol.Name = _columnName;
            buttonCol.HeaderText = _headerText;
            buttonCol.DataPropertyName = _dataPropertyName;
            buttonCol.ToolTipText = _toolTipText;
            buttonCol.Visible = _visible;
            buttonCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                buttonCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(buttonCol);
        }
        #endregion

        #region 创建DataGridView的扩展的Button列
        /// <summary>
        /// 创建DataGridView的扩展的Button列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_autoCheckOnClick">设置单击时是否选择相同内容的,true 是,false 否</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvButtonXColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, bool _readOnly, bool _visible, bool _notEmpty, Color _backColor,
            bool _autoCheckOnClick, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewButtonXColumn buttonXCol = new DataGridViewButtonXColumn();
            buttonXCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            buttonXCol.Name = _columnName;
            buttonXCol.HeaderText = _headerText;
            buttonXCol.DataPropertyName = _dataPropertyName;
            buttonXCol.ToolTipText = _toolTipText;
            buttonXCol.Visible = _visible;
            buttonXCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                buttonXCol.DefaultCellStyle.BackColor = _backColor;
            }
            buttonXCol.AutoCheckOnClick = _autoCheckOnClick;
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(buttonXCol);
        }
        #endregion

        #region 创建DataGridView的CheckBox列
        /// <summary>
        /// 创建DataGridView的CheckBox列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvCheckBoxColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, bool _readOnly, bool _visible, bool _notEmpty,
            Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewCheckBoxColumn checkBoxCol = new DataGridViewCheckBoxColumn();
            checkBoxCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            checkBoxCol.Name = _columnName;
            checkBoxCol.HeaderText = _headerText;
            checkBoxCol.DataPropertyName = _dataPropertyName;
            checkBoxCol.ToolTipText = _toolTipText;
            checkBoxCol.Visible = _visible;
            checkBoxCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                checkBoxCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(checkBoxCol);
        }
        #endregion

        #region 创建DataGridView扩展的CheckBox列
        /// <summary>
        /// 创建DataGridView扩展的CheckBox列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvCheckBoxXColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, bool _readOnly, bool _visible, bool _notEmpty,
            Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewCheckBoxXColumn checkBoxXCol = new DataGridViewCheckBoxXColumn();
            checkBoxXCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            checkBoxXCol.Name = _columnName;
            checkBoxXCol.HeaderText = _headerText;
            checkBoxXCol.DataPropertyName = _dataPropertyName;
            checkBoxXCol.ToolTipText = _toolTipText;
            checkBoxXCol.Visible = _visible;
            checkBoxXCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                checkBoxXCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(checkBoxXCol);
        }
        #endregion

        #region 创建DataGridView的ComboBox列
        /// <summary>
        /// 创建DataGridView的ComboBox列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_cboDataSource">绑定ComboBox的数据源</param>
        /// <param name="_displayMember">用于显示的字段名</param>
        /// <param name="_valueMember">绑定Value的字段名</param>
        /// <param name="_maxDropDownItems">设置显示最大的下拉项条数</param>
        /// <param name="_cboDisplayStyle">设置显示类型</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvComboBoxColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, bool _readOnly, bool _visible,
            DataTable _cboDataSource, string _displayMember, string _valueMember,
            int _maxDropDownItems, DataGridViewComboBoxDisplayStyle _cboDisplayStyle,
            bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewComboBoxColumn comboBoxCol = new DataGridViewComboBoxColumn();
            comboBoxCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            comboBoxCol.Name = _columnName;
            comboBoxCol.HeaderText = _headerText;
            comboBoxCol.DataPropertyName = _dataPropertyName;
            comboBoxCol.ToolTipText = _toolTipText;
            comboBoxCol.Visible = _visible;
            comboBoxCol.ReadOnly = _readOnly;
            comboBoxCol.DataSource = _cboDataSource;
            comboBoxCol.DisplayMember = _displayMember;
            comboBoxCol.ValueMember = _valueMember;
            comboBoxCol.MaxDropDownItems = _maxDropDownItems;
            comboBoxCol.DisplayStyle = _cboDisplayStyle;
            comboBoxCol.AutoComplete = _cboDisplayStyle == DataGridViewComboBoxDisplayStyle.ComboBox ? true : false;
            if (_notEmpty == true)
            {
                comboBoxCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(comboBoxCol);
        }
        #endregion

        #region 创建DataGridView扩展的ComboBox列
        /// <summary>
        /// 创建DataGridView扩展的ComboBox列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_cboDataSource">绑定ComboBox的数据源</param>
        /// <param name="_displayMember">用于显示的字段名</param>
        /// <param name="_valueMember">绑定Value的字段名</param>
        /// <param name="_maxDropDownItems">设置显示最大的下拉项条数</param>
        /// <param name="_dropDownStyle">设置显示类型</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvComboBoxExColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, bool _readOnly, bool _visible,
            DataTable _cboDataSource, string _displayMember, string _valueMember,
            int _maxDropDownItems, ComboBoxStyle _dropDownStyle,
            bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewComboBoxExColumn comboBoxExCol = new DataGridViewComboBoxExColumn();
            comboBoxExCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            comboBoxExCol.Name = _columnName;
            comboBoxExCol.HeaderText = _headerText;
            comboBoxExCol.DataPropertyName = _dataPropertyName;
            comboBoxExCol.ToolTipText = _toolTipText;
            comboBoxExCol.Visible = _visible;
            comboBoxExCol.ReadOnly = _readOnly;
            comboBoxExCol.DataSource = _cboDataSource;
            comboBoxExCol.DisplayMember = _displayMember;
            comboBoxExCol.ValueMember = _valueMember;
            comboBoxExCol.MaxDropDownItems = _maxDropDownItems;
            comboBoxExCol.DropDownStyle = _dropDownStyle;
            if (_notEmpty == true)
            {
                comboBoxExCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(comboBoxExCol);
        }
        #endregion

        #region 创建DataGridView扩展的DateTime列
        /// <summary>
        /// 创建DataGridView扩展的DateTime列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_format">设置日期格式</param>
        /// <param name="_defaultInputValues">设置当日起为空时,是否显示默认日期,true 显示,false 不显示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvDateTimeColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText,
            string _format, bool _defaultInputValues,
            bool _readOnly, bool _visible, bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewDateTimeInputColumn dateTimeCol = new DataGridViewDateTimeInputColumn();
            dateTimeCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            dateTimeCol.Name = _columnName;
            dateTimeCol.HeaderText = _headerText;
            dateTimeCol.DataPropertyName = _dataPropertyName;
            dateTimeCol.ToolTipText = _toolTipText;
            dateTimeCol.AutoSelectDate = true;
            dateTimeCol.CustomFormat = _format;
            dateTimeCol.DefaultInputValues = _defaultInputValues;
            dateTimeCol.Visible = _visible;
            dateTimeCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                dateTimeCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(dateTimeCol);
        }
        #endregion

        #region 创建DataGridView扩展的DoubleInput列
        /// <summary>
        /// 创建DataGridView扩展的DoubleInput列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_format">设置数字格式</param>
        /// <param name="_showUpDown">设置是否显示上下调节按钮,true 显示,false 不显示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvDoubleInputColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText,
            string _format, bool _showUpDown,
            bool _readOnly, bool _visible, bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewDoubleInputColumn doubleInputCol = new DataGridViewDoubleInputColumn();
            doubleInputCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            doubleInputCol.Name = _columnName;
            doubleInputCol.HeaderText = _headerText;
            doubleInputCol.DataPropertyName = _dataPropertyName;
            doubleInputCol.ToolTipText = _toolTipText;
            doubleInputCol.DisplayFormat = _format;
            doubleInputCol.ShowUpDown = _showUpDown;
            doubleInputCol.Visible = _visible;
            doubleInputCol.ReadOnly = _readOnly;
            doubleInputCol.InputHorizontalAlignment = DevComponents.Editors.eHorizontalAlignment.Right;
            if (_notEmpty == true)
            {
                doubleInputCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(doubleInputCol);
        }
        #endregion

        #region 创建DataGridView扩展的Image列
        /// <summary>
        /// 创建DataGridView扩展的Image列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_image">图片</param>
        /// <param name="_layout">设置图片布局方式</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvImageColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText,
            Image _image, DataGridViewImageCellLayout _layout,
            bool _readOnly, bool _visible, bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewImageColumn imageCol = new DataGridViewImageColumn();
            imageCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            imageCol.Name = _columnName;
            imageCol.HeaderText = _headerText;
            imageCol.DataPropertyName = _dataPropertyName;
            imageCol.ToolTipText = _toolTipText;
            imageCol.Image = _image;
            imageCol.ImageLayout = _layout;
            imageCol.Visible = _visible;
            imageCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                imageCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(imageCol);
        }
        #endregion

        #region 创建DataGridView扩展的IntegerInput列
        /// <summary>
        /// 创建DataGridView扩展的IntegerInput列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_showUpDown">设置列是否显示上下可调节按钮,true 显示,false 隐藏</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvIntegerInputColumn(DataGridView _dgv,
           DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
           string _dataPropertyName, string _toolTipText, bool _showUpDown,
           bool _readOnly, bool _visible, bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewIntegerInputColumn integerInputCol = new DataGridViewIntegerInputColumn();
            integerInputCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            integerInputCol.Name = _columnName;
            integerInputCol.HeaderText = _headerText;
            integerInputCol.DataPropertyName = _dataPropertyName;
            integerInputCol.ToolTipText = _toolTipText;
            integerInputCol.ShowUpDown = _showUpDown;
            integerInputCol.Visible = _visible;
            integerInputCol.ReadOnly = _readOnly;
            integerInputCol.InputHorizontalAlignment = DevComponents.Editors.eHorizontalAlignment.Right;
            if (_notEmpty == true)
            {
                integerInputCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(integerInputCol);
        }
        #endregion

        #region 创建DataGridView扩展的IpAddressInput列
        /// <summary>
        /// 创建DataGridView扩展的IpAddressInput列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvIpAddressInputColumn(DataGridView _dgv,
          DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
          string _dataPropertyName, string _toolTipText,
          bool _readOnly, bool _visible, bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewIpAddressInputColumn ipCol = new DataGridViewIpAddressInputColumn();
            ipCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            ipCol.Name = _columnName;
            ipCol.HeaderText = _headerText;
            ipCol.DataPropertyName = _dataPropertyName;
            ipCol.ToolTipText = _toolTipText;
            ipCol.Visible = _visible;
            ipCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                ipCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(ipCol);
        }
        #endregion

        #region 创建DataGridView扩展的Lable列
        /// <summary>
        /// 创建DataGridView扩展的Lable列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_familyName">设置字体</param>
        /// <param name="_fontSize">设置字体大小</param>
        /// <param name="_fontStyle">设置字体样式</param>
        /// <param name="_fontColor">设置字体颜色</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvLableXColumn(DataGridView _dgv,
           DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
           string _dataPropertyName, string _toolTipText,
           string _familyName, float _fontSize, FontStyle _fontStyle, Color _fontColor,
           bool _readOnly, bool _visible, bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewLabelXColumn lablelXCol = new DataGridViewLabelXColumn();
            lablelXCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            lablelXCol.Name = _columnName;
            lablelXCol.HeaderText = _headerText;
            lablelXCol.DataPropertyName = _dataPropertyName;
            lablelXCol.ToolTipText = _toolTipText;
            lablelXCol.Visible = _visible;
            lablelXCol.ReadOnly = _readOnly;
            lablelXCol.DefaultCellStyle.ForeColor = _fontColor;
            lablelXCol.DefaultCellStyle.SelectionForeColor = _fontColor;
            lablelXCol.DefaultCellStyle.Font = new Font(_familyName, _fontSize, _fontStyle);
            if (_notEmpty == true)
            {
                lablelXCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(lablelXCol);
        }
        #endregion

        #region 创建DataGridView扩展的Link列
        /// <summary>
        /// 创建DataGridView扩展的Link列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_fontColor">设置字体颜色</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvLinkColumn(DataGridView _dgv,
           DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
           string _dataPropertyName, string _toolTipText, Color _fontColor,
           bool _readOnly, bool _visible, bool _notEmpty, Color _backColor, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewLinkColumn linkCol = new DataGridViewLinkColumn();
            linkCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            linkCol.Name = _columnName;
            linkCol.HeaderText = _headerText;
            linkCol.DataPropertyName = _dataPropertyName;
            linkCol.ToolTipText = _toolTipText;
            linkCol.Visible = _visible;
            linkCol.ReadOnly = _readOnly;
            linkCol.LinkColor = _fontColor;
            linkCol.UseColumnTextForLinkValue = true;
            linkCol.LinkBehavior = LinkBehavior.AlwaysUnderline;
            linkCol.DefaultCellStyle.ForeColor = _fontColor;
            linkCol.DefaultCellStyle.SelectionForeColor = _fontColor;
            if (_notEmpty == true)
            {
                linkCol.DefaultCellStyle.BackColor = _backColor;
            }
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(linkCol);
        }
        #endregion

        #region 创建DataGridView的扩展的MaskedTextBoxAdvColumn列
        /// <summary>
        /// 创建DataGridView的扩展的MaskedTextBoxAdvColumn列
        /// </summary>
        /// <param name="_dgv">要创建列的DataGridView</param>
        /// <param name="_alignment">设置列的对齐方式</param>
        /// <param name="_columnName">列名</param>
        /// <param name="_headerText">标题名</param>
        /// <param name="_dataPropertyName">绑定数据源的字段名称</param>
        /// <param name="_toolTipText">TipText提示</param>
        /// <param name="_maxInputLength">可输入的最大长度</param>
        /// <param name="_readOnly">设置列是否只读,true 只读,false 读写</param>
        /// <param name="_visible">设置列是否可见,true 显示,false 隐藏</param>
        /// <param name="_notEmpty">设置列是否为必填列,true 必填,false 非必填</param>
        /// <param name="_backColor">设置列的背景色,当_notEmpty为true时,此项为必需值,为false,此项可以为Color.Empty</param>
        /// <param name="_buttonCustomVisible">设置是否显示可选择按钮,true 显示,false 隐藏</param>
        /// <param name="_columnState">装载DataGridView可写可读、只读列的数据字典</param>
        public static void InitDgvMaskedTextBoxAdvColumn(DataGridView _dgv,
            DataGridViewContentAlignment _alignment, string _columnName, string _headerText,
            string _dataPropertyName, string _toolTipText, int _maxInputLength, bool _readOnly, bool _visible,
            bool _notEmpty, Color _backColor, bool _buttonCustomVisible, ref Dictionary<string, bool> _columnState)
        {
            DataGridViewMaskedTextBoxAdvColumn maskedTextBoxAdvCol = new DataGridViewMaskedTextBoxAdvColumn();
            maskedTextBoxAdvCol.HeaderCell.Style.Alignment = _alignment == 0 ? DataGridViewContentAlignment.MiddleLeft : _alignment;
            maskedTextBoxAdvCol.Name = _columnName;
            maskedTextBoxAdvCol.HeaderText = _headerText;
            maskedTextBoxAdvCol.DataPropertyName = _dataPropertyName;
            maskedTextBoxAdvCol.ToolTipText = _toolTipText;
            maskedTextBoxAdvCol.MaxInputLength = _maxInputLength;
            maskedTextBoxAdvCol.Visible = _visible;
            maskedTextBoxAdvCol.ReadOnly = _readOnly;
            if (_notEmpty == true)
            {
                maskedTextBoxAdvCol.DefaultCellStyle.BackColor = _backColor;
            }
            maskedTextBoxAdvCol.ButtonCustom.Visible = _buttonCustomVisible;
            _columnState.Add(_columnName, _readOnly);
            _dgv.Columns.Add(maskedTextBoxAdvCol);
        }
        #endregion

        #region 合并单元格
        /// <summary>
        /// 合并单元格
        /// </summary>
        /// <param name="columnIndexList">合并的列索引</param>
        /// <param name="dgv">DataGridView控件</param>
        /// <param name="e"></param>
        public static void DataGridViewRowSpan(ArrayList columnIndexList, DataGridView dgv, DataGridViewCellPaintingEventArgs e)
        {
            int cellheight;
            int fontheight;
            int cellwidth;
            int fontwidth;
            int countU = 0;
            int countD = 0;
            int count = 0;
            int totalheight = 0;
            int heightU = 0;
            int heightD = 0;
            //纵向合并
            if (columnIndexList.Contains(e.ColumnIndex) && e.RowIndex >= 0)
            {
                cellheight = e.CellBounds.Height;
                fontheight = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Height;
                cellwidth = e.CellBounds.Width;
                fontwidth = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Width;
                string curValue = dgv.Rows[e.RowIndex].Cells[0].Value == null ? "" : dgv.Rows[e.RowIndex].Cells[0].Value.ToString().Trim();
                string curSelected = dgv.CurrentRow.Cells[0].Value == null ? "" : dgv.CurrentRow.Cells[0].Value.ToString().Trim();
                if (!string.IsNullOrEmpty(curValue))
                {
                    for (int i = e.RowIndex; i < dgv.Rows.Count; i++)
                    {
                        if (dgv.Rows[i].Cells[0].Value.ToString().Equals(curValue))
                        {
                            dgv.Rows[i].Cells[0].Selected = dgv.Rows[e.RowIndex].Selected;
                            dgv.Rows[i].Selected = dgv.Rows[e.RowIndex].Selected;
                            countD++;
                            heightD += dgv.Rows[i].Height;
                        }
                        else
                        {
                            break;
                        }
                    }
                    for (int i = e.RowIndex; i >= 0; i--)
                    {
                        if (dgv.Rows[i].Cells[0].Value.ToString().Equals(curValue))
                        {
                            dgv.Rows[i].Cells[0].Selected = dgv.Rows[e.RowIndex].Selected;
                            dgv.Rows[i].Selected = dgv.Rows[e.RowIndex].Selected;
                            heightU += dgv.Rows[i].Height;
                            countU++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    heightU = heightU - e.CellBounds.Height;
                    totalheight = heightU + heightD;
                    count = countD + countU - 1;
                    if (count < 2) { return; }
                }


                Brush gridBrush = new SolidBrush(dgv.GridColor),
                backColorBrush = new SolidBrush(e.CellStyle.BackColor);

                Pen gridLinePen = new Pen(gridBrush);

                // 擦除原单元格背景
                e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
                ////绘制线条,这些线条是单元格相互间隔的区分线条,
                ////因为我们只对列name做处理,所以datagridview自己会处理左侧和上边缘的线条
                if (e.RowIndex != dgv.RowCount - 1)
                {
                    if (e.Value.ToString() != dgv.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString())
                    {
                        e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1,
                        e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);//下边缘的线
                        //绘制值
                        if (e.Value != null)
                        {
                            e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font,
                                Brushes.Black, e.CellBounds.X,
                            e.CellBounds.Y - heightU + (totalheight - fontheight) / 2,
                            StringFormat.GenericDefault);
                        }
                    }
                    else
                    {
                        //绘制值
                        if (e.Value != null)
                        {
                            e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font,
                                Brushes.Black, e.CellBounds.X,
                            e.CellBounds.Y - heightU + (totalheight - fontheight) / 2,
                            StringFormat.GenericDefault);
                        }
                    }
                }
                else
                {
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1,
                        e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);//下边缘的线
                    //绘制值
                    if (e.Value != null)
                    {
                        e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font,
                            Brushes.Black, e.CellBounds.X,
                            e.CellBounds.Y - heightU + (totalheight - fontheight) / 2,
                            StringFormat.GenericDefault);
                    }
                }
                //右侧的线
                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                    e.CellBounds.Top, e.CellBounds.Right - 1,
                    e.CellBounds.Bottom - 1);
                e.Handled = true;

            }

            //单击单元格改变颜色
            dgv.CellClick += new DataGridViewCellEventHandler(dgv_CellClick);

        }

        private static int rowIndex = -1;
        private static int colIndex = -1;
        static void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                DataGridView dgv = (DataGridView)sender;
                rowIndex = e.RowIndex;
                colIndex = e.RowIndex;
                for (int i = 0; i < dgv.Rows.Count; i++)
                {
                    for (int j = 0; j < dgv.Columns.Count; j++)
                    {
                        if (dgv.Rows[i].Cells[j] != dgv.Rows[rowIndex].Cells[colIndex])
                        {
                            dgv.Rows[i].Cells[j].Style.BackColor = Color.White;
                            dgv.Rows[i].Cells[j].Style.ForeColor = Color.Black;
                        }
                        else
                        {
                            dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = SystemColors.Info;
                        }
                    }
                }

                dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.ForeColor = Color.Black;

            }
            catch
            {

            }
        }
        #endregion
    }

}




//



#region  构建DataGirdView列
        /// <summary>
        ///装载DataGridView可写可读、只读列的数据字典
        ///Author:  
        ///WriteTime: 2014-01-22 23:49:37
        /// </summary>
        private Dictionary<string, bool> ColumnState = new Dictionary<string, bool>();

        /// <summary>
        ///构建DataGirdView列
        ///Author:  
        ///WriteTime: 2014-01-22 23:49:37
        /// </summary>
        private void InitDataGirdViewColumn()
        {
            Image imageDV = null;
            this.dgvParent.Columns.Clear();
            DgvTools.InitDgvCheckBoxColumn(this.dgvParent, DataGridViewContentAlignment.MiddleCenter,
                "选择", "选择", "选择", "", false, true, false, Color.Empty, ref ColumnState);
            DgvTools.InitDgvTextBoxColumn(this.dgvParent, DataGridViewContentAlignment.MiddleCenter,
                "_AutoID", "_AutoID", "_AutoID", "", 40, true, true, false, Color.Empty, ref ColumnState);
            DgvTools.InitDgvTextBoxColumn(this.dgvParent, DataGridViewContentAlignment.MiddleCenter,
                "_ID", "_ID", "_ID", "", 100, true, true, false, Color.Empty, ref ColumnState);
            DgvTools.InitDgvTextBoxColumn(this.dgvParent, DataGridViewContentAlignment.MiddleCenter,
                "CODE", "编号", "CODE", "", 100, true, true, false, Color.Empty, ref ColumnState);
            DgvTools.InitDgvImageColumn(this.dgvParent, DataGridViewContentAlignment.MiddleCenter,
                "Pic", "图片", "Pic", "", imageDV, DataGridViewImageCellLayout.Normal, true, true, false, Color.Empty, ref ColumnState);
            DgvTools.InitDgvTextBoxColumn(this.dgvParent, DataGridViewContentAlignment.MiddleCenter,
                "Note", "说明", "Note", "", 100, true, true, false, Color.Empty, ref ColumnState);
            this.dgvParent.Columns[0].Width = 65;
            this.dgvParent.Columns[0].Frozen = true;

        }
        #endregion

0 0
原创粉丝点击