DataGridView中的DataGridViewComboBoxColumn列如何让其可编辑也可下拉选择。
请高手指点下
看了重写类的代码,但是不知道怎么用?谢谢

解决方案 »

  1.   

    DataGridViewComboBoxColumn列如何让其可编辑编辑COMBOBOX中的ITEM不就行了吗,
    将这些ITEM单独保存成一个文件,
    在DataGridView打开时读取ITEM并添加到COMBOBOX
      

  2.   

    让其enabled为true,并且将其绑定就可以了
      

  3.   

    http://blog.csdn.net/wzuomin/archive/2007/06/15/1653619.aspx
      

  4.   

    你把下面的代码,拷去调试一下,会产生一列名为ComboBoxEx的下拉框列,可以编辑内容,亦可以通过下拉框选择://设计一个继承自ComboBox的下拉框编辑列组件
        public class DataGridViewComboBoxExEditingControl : ComboBox, IDataGridViewEditingControl
        {
            protected int rowIndex;
            protected DataGridView dataGridView;
            protected bool valueChanged = false;        protected override void OnTextChanged(System.EventArgs e)
            {
                base.OnTextChanged(e);
                NotifyDataGridViewOfValueChange();        }        private void NotifyDataGridViewOfValueChange()
            {
                valueChanged = true;
                dataGridView.NotifyCurrentCellDirty(true);
            }
            protected override void OnSelectedIndexChanged(EventArgs e)
            {
                base.OnTextChanged(e);
                NotifyDataGridViewOfValueChange();
            }        public Cursor EditingPanelCursor
            {
                get { return Cursors.IBeam; }
            }        public DataGridView EditingControlDataGridView
            {
                get { return dataGridView; }
                set { dataGridView = value; }
            }        public object EditingControlFormattedValue
            {
                set
                {
                    Text = value.ToString();
                    NotifyDataGridViewOfValueChange();
                }
                get
                {
                    return this.Text;
                }        }        public virtual object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
            {
                return Text;        }        public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey)
            {            switch (key & Keys.KeyCode)
                {
                    case Keys.Left:
                    case Keys.Up:
                    case Keys.Down:
                    case Keys.Right:
                    case Keys.Home:
                    case Keys.End:
                    case Keys.Escape:
                    case Keys.Enter:
                    case Keys.PageDown:
                    case Keys.PageUp:
                        return true;
                    default:
                        return false;
                }
            }        public void PrepareEditingControlForEdit(bool selectAll)
            {
                if (selectAll)
                {
                    SelectAll();
                }
                else
                {
                    this.SelectionStart = this.ToString().Length;
                }
            }
            public virtual bool RepositionEditingControlOnValueChange
            {
                get
                {
                    return false;
                }
            }        public int EditingControlRowIndex
            {
                get { return this.rowIndex; }
                set { this.rowIndex = value; }
            }        public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
            {
                this.Font = dataGridViewCellStyle.Font;
                this.ForeColor = dataGridViewCellStyle.ForeColor;
                this.BackColor = dataGridViewCellStyle.BackColor;
            }        public bool EditingControlValueChanged
            {
                get { return valueChanged; }
                set { this.valueChanged = value; }
            }
        }    //定制该扩展列的单元格
        public class DataGridViewComboBoxExCell:DataGridViewTextBoxCell
        {
            public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
            {
                base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);            DataGridViewComboBoxExEditingControl clt = DataGridView.EditingControl as DataGridViewComboBoxExEditingControl;            DataGridViewComboBoxExColumn col = (DataGridViewComboBoxExColumn)OwningColumn;            clt.DataSource = col.DataSource;
                clt.DisplayMember = col.DisplayMember;
                clt.ValueMember = col.ValueMember;            clt.Text = Convert.ToString(this.Value);
            }        public override Type EditType
            {
                get
                {
                    return typeof(DataGridViewComboBoxExEditingControl);
                }
            }        public override Type ValueType
            {
                get
                {
                    return typeof(string);
                }
            }        public override object DefaultNewRowValue
            {
                get
                {
                    return "";
                }
            }
        }    //定制该扩展列
        public class DataGridViewComboBoxExColumn : DataGridViewColumn
        {
            private object dataSoruce = null;        public object DataSource
            {
                get { return dataSoruce; }
                set { dataSoruce = value; }
            }
            private string valueMember;        public string ValueMember
            {
                get { return valueMember; }
                set { valueMember = value; }
            }
            private string displayMember;        public string DisplayMember
            {
                get { return displayMember; }
                set { displayMember = value; }
            }        public DataGridViewComboBoxExColumn()
                : base(new DataGridViewComboBoxExCell())
            {        }        public override DataGridViewCell CellTemplate
            {
                get
                {
                    return base.CellTemplate;
                }
                set
                {
                    if (value != null && !value.GetType().IsAssignableFrom(typeof(DataGridViewComboBoxExCell)))
                    {
                        throw new InvalidCastException("is not DataGridViewComboxExCell");
                    }
                    base.CellTemplate = value;
                }
            }
            private DataGridViewComboBoxExCell ComboBoxCellTemplate
            {
                get
                {
                    return (DataGridViewComboBoxExCell)this.CellTemplate;
                }
            }
        }有问题,再找我!
      

  5.   

    自己总结了一下:datagridviewcomboboxcolumn可选可编辑的三种方法
    http://download.csdn.net/source/1035373