⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdatagridviewcomboboxcell.cs

📁 简单数据库
💻 CS
字号:
using System;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Collections.Generic;

namespace QueryTool_V1
{
    public class CDataGridViewComboBoxColumn : DataGridViewColumn
    {
        public ArrayList dummy = new ArrayList();

        public CDataGridViewComboBoxColumn()
            : base(new CDataGridViewComboBoxCell())
        {
        }

        public override DataGridViewCell CellTemplate
        {
            get
            {
                return base.CellTemplate;
            }
            set
            {
                // Ensure that the cell used for the template is a ComboBoxCell.
                if (value != null &&
                    !value.GetType().IsAssignableFrom(typeof(CDataGridViewComboBoxCell)))
                {
                    throw new InvalidCastException("Must be a ComboBoxCell");
                }
                base.CellTemplate = value;
            }
        }
    }
    
    public class CDataGridViewComboBoxCell : DataGridViewTextBoxCell
    {
        public class ObjectCollection : IList, ICollection, IEnumerable
        {

            private ArrayList list;

            private CDataGridViewComboBoxCell owner;

            public ObjectCollection(CDataGridViewComboBoxCell owner)
            {
                this.owner = owner;
                list = new ArrayList();
            }

            public virtual int Count
            {
                get { return list.Count; }
            }

            public virtual bool IsFixedSize
            {
                get { return list.IsFixedSize; }
            }

            public virtual bool IsReadOnly
            {
                get { return list.IsReadOnly; }
            }

            public virtual bool IsSynchronized
            {
                get { return list.IsSynchronized; }
            }

            public virtual object SyncRoot
            {
                get { return list.SyncRoot; }
            }

            public virtual object this[int index]
            {
                get { return list[index]; }
                set { list[index] = value; }
            }

            public int Add(object item)
            {
                owner.ctl.Items.Add(item);
                return list.Add(item);
            }

            public void AddRange(ObjectCollection value)
            {
                list.AddRange(value.list);
            }

            public void AddRange(object[] items)
            {
                owner.ctl.Items.AddRange(items);
                list.AddRange(items);
            }

            //public sealed void Clear () {
            public void Clear()
            {
                owner.ctl.Items.Clear();
                list.Clear();
            }

            //public sealed bool Contains (object value) {
            public bool Contains(object value)
            {
                return list.Contains(value);
            }

            public void CopyTo(Array destination, int arrayIndex)
            {
                list.CopyTo(destination, arrayIndex);
            }

            //public sealed IEnumerator GetEnumerator () {
            public IEnumerator GetEnumerator()
            {
                return list.GetEnumerator();
            }

            //public sealed int IndexOf (object value) {
            public int IndexOf(object value)
            {
                return list.IndexOf(value);
            }

            //public sealed void Insert (int index, object item) {
            public void Insert(int index, object item)
            {
                list.Insert(index, item);
            }

            //public sealed void Remove (object value) {
            public void Remove(object value)
            {
                list.Remove(value);
            }

            //public sealed void RemoveAt (int index) {
            public void RemoveAt(int index)
            {
                list.RemoveAt(index);
            }

        }
        public CDataGridViewComboBoxEditingControl ctl;
        ObjectCollection items;        
        public CDataGridViewComboBoxCell()
            : base()
        {
            items = new ObjectCollection(this);
        }

        public virtual ObjectCollection Items
        {
            get { return items; }
        }
        public override void InitializeEditingControl(int rowIndex, object
            initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
        {
            // Set the value of the editing control to the current cell value.
            base.InitializeEditingControl(rowIndex, initialFormattedValue,
                dataGridViewCellStyle);
            ctl =
                DataGridView.EditingControl as CDataGridViewComboBoxEditingControl;
            
            ctl.Items.Clear();
            ctl.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            ctl.AutoCompleteSource = AutoCompleteSource.ListItems;
            ctl.TextChanged += new EventHandler(ctl_TextChanged);            
            ctl.Text = (string)this.Value;

        }
        private void ctl_TextChanged(object sender, EventArgs e)
        {
            if (!ctl.Text.Equals("") || !ctl.Text.Equals(string.Empty))
            {
                ctl.Text = ctl.Text;
                ctl.EditingControlDataGridView.NotifyCurrentCellDirty(true);
                ctl.EditingControlValueChanged = true;
            }            
        }        

        public override Type EditType
        {
            get
            {
                // Return the type of the editing contol that ComboBoxCell uses.
                return typeof(CDataGridViewComboBoxEditingControl);
            }
        }

        public override Type ValueType
        {
            get
            {
                // Return the type of the value that ComboBoxCell contains.
                return typeof(string);
            }
        }

        public override object DefaultNewRowValue
        {
            get
            {
                // Use the current date and time as the default value.
                return string.Empty;
            }
        }
    }
    
    public class CDataGridViewComboBoxEditingControl : ComboBox, IDataGridViewEditingControl
    {
        DataGridView dataGridView;
        private bool valueChanged = false;
        int rowIndex;

        public CDataGridViewComboBoxEditingControl()
        {
        }

        // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
        // property.
        public object EditingControlFormattedValue
        {
            get
            {
                return this.Text;
            }
            set
            {
                if (value is String)
                {
                    this.Text = value.ToString();
                }
            }
        }

        // Implements the 
        // IDataGridViewEditingControl.GetEditingControlFormattedValue method.
        public object GetEditingControlFormattedValue(
            DataGridViewDataErrorContexts context)
        {
            return EditingControlFormattedValue;
        }

        // Implements the 
        // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.
        public void ApplyCellStyleToEditingControl(
            DataGridViewCellStyle dataGridViewCellStyle)
        {
            this.Font = dataGridViewCellStyle.Font;
        }

        // Implements the IDataGridViewEditingControl.EditingControlRowIndex 
        // property.
        public int EditingControlRowIndex
        {
            get
            {
                return rowIndex;
            }
            set
            {
                rowIndex = value;
            }
        }

        // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey 
        // method.
        public bool EditingControlWantsInputKey(
            Keys key, bool dataGridViewWantsInputKey)
        {
            // Let the DateTimePicker handle the keys listed.
            switch (key & Keys.KeyCode)
            {
                case Keys.Left:
                case Keys.Up:
                case Keys.Down:
                case Keys.Right:
                case Keys.Home:
                case Keys.End:
                case Keys.PageDown:
                case Keys.PageUp:
                    return true;
                default:
                    return !dataGridViewWantsInputKey;
            }
        }

        // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit 
        // method.
        public void PrepareEditingControlForEdit(bool selectAll)
        {
            // No preparation needs to be done.
        }

        // Implements the IDataGridViewEditingControl
        // .RepositionEditingControlOnValueChange property.
        public bool RepositionEditingControlOnValueChange
        {
            get
            {
                return false;
            }
        }

        // Implements the IDataGridViewEditingControl
        // .EditingControlDataGridView property.
        public DataGridView EditingControlDataGridView
        {
            get
            {
                return dataGridView;
            }
            set
            {
                dataGridView = value;
            }
        }

        // Implements the IDataGridViewEditingControl
        // .EditingControlValueChanged property.
        public bool EditingControlValueChanged
        {
            get
            {
                return valueChanged;
            }
            set
            {
                valueChanged = value;
            }
        }

        // Implements the IDataGridViewEditingControl
        // .EditingPanelCursor property.
        public Cursor EditingPanelCursor
        {
            get
            {
                return base.Cursor;
            }
        }        
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -