1.定義

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 } }
2.
應用

#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