C# DataGridViewComboBoxColumn 支持edit

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaoshenjie/article/details/85917755

最近需要支持DataGridViewComboBoxColumn  支持编辑 的功能!对于这个功能。Framework不支持。我也表示不理解!都有这个ComboBoxColumn.然后不支持Edit,那要这个ComboBox做啥呢?要是几百个下拉,要人家一个一个找么!算了,在这里也就不吐槽了!下面就贴下网上捞的代码吧!我也不知道哪里捞的了,网上好像很多!反正大家都是抄来抄去的,也不新鲜了!估计都是想着自己备忘而已!

不多说了。

1. Copy代码:

using System.ComponentModel;
using System.Windows.Forms;

namespace UI
{
    public class CustomDGVComboBoxCell : DataGridViewComboBoxCell
    {
        public override void InitializeEditingControl(int rowIndex, object initialFormattedValue,
            DataGridViewCellStyle dataGridViewCellStyle)
        {
            base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);

            ComboBox comboBox = (ComboBox)base.DataGridView.EditingControl;
            if (comboBox != null)
            {
                comboBox.DropDownStyle = ComboBoxStyle.DropDown;
                comboBox.AutoCompleteMode = AutoCompleteMode.Suggest;

            }
        }

        protected override object GetFormattedValue(object value, int rowIndex,
             ref DataGridViewCellStyle cellStyle, TypeConverter valueTypeConverter,
             TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context)
        {
            return base.GetFormattedValue(value, rowIndex, ref cellStyle, valueTypeConverter, formattedValueTypeConverter, context);
        }

    }

    public class CustomDGVComboBoxColumn : DataGridViewComboBoxColumn
    {
        public CustomDGVComboBoxColumn()
        {
            CustomDGVComboBoxCell obj = new CustomDGVComboBoxCell();
            this.CellTemplate = obj;
        }
    }
}

2. 怎么用是吧?网上都是copy了code,然后了事。这使得我们这些抄代码的就不知所措了!没事。我这里写下怎么用!(我这里是要在设计器里面的DGV里面直接选择Column类型的,至于那种自己写code的。直接掉用就好了)

2.1 设计器里面编辑列,给自己的ComboBoxColumn设置ColumnType! 选择自己封装的那个CustomDGVComboBoxColumn 就好!

2.2 code里面那么用。这是重点!这些什么绑定的时候啊!DisplayMember 、ValueMember 和DataSource.自然是你自己想要的!我这里只是参考!

((DataGridViewComboBoxColumn)dgv_ProjectManage.Columns["ProjectManage_DesignPhase"]).DisplayMember = "Name";          

((DataGridViewComboBoxColumn)dgv_ProjectManage.Columns["ProjectManage_DesignPhase"]).ValueMember = "Name";     

((DataGridViewComboBoxColumn)dgv_ProjectManage.Columns["ProjectManage_DesignPhase"]).DataSource = 
     new BindingList<Model.DesignPhaseConfig>(project_List_DesignPhase);

猜你喜欢

转载自blog.csdn.net/yaoshenjie/article/details/85917755