焦点不动更新单元格内容(DataGridView)

    技术2022-05-20  43

    1.功能描述:

    通过重写DataGridViewColumn,DataGridViewTextBoxCell,并在重写的 DataGridViewTextBoxCell   注册一个dgvtbec_KeyUp事件实现其功能

    2.具体代码如下

    a. /// <summary>    /// 自定义DataGridView中的列    /// </summary>    public class SpecialDataGridViewColumn : DataGridViewColumn    {        //给UI层注册使用的事件        public event KeyEventHandler DataGridViewColumnKeyUp;                public SpecialDataGridViewColumn()            : base()        {            this.CellTemplate = new SpecialDataGridViewCell();        }        public override DataGridViewCell CellTemplate        {            get            {                return base.CellTemplate;            }            set            {                if (value != null && !value.GetType().IsAssignableFrom(typeof(SpecialDataGridViewCell)))                {                    throw new Exception("column must Bind type for SpecialDataGridViewCell");                }                base.CellTemplate = value;            }        }

            private string m_dataGridViewColumnTextValue = "";

            public string DataGridViewColumnTextValue        {            get            {                return m_dataGridViewColumnTextValue;            }            set            {                m_dataGridViewColumnTextValue = value;            }        }

            public void SpecialDataGridViewColumn_DataGridViewColumnKeyUp(object sender, KeyEventArgs e)        {

                if (DataGridViewColumnKeyUp != null)            {                             DataGridViewColumnKeyUp(this, e);            }        }    }

    b.    /// <summary>    /// 自定义单元格的可编辑文本    /// </summary>    public class SpecialDataGridViewCell : DataGridViewTextBoxCell    {        public override Type EditType        {            get            {                return typeof(DataGridViewTextBoxEditingControl);            }        }

            public SpecialDataGridViewCell()            : base()        { }        private DataGridViewTextBoxEditingControl dgvtbec;        private DataGridViewColumn dgvc;        private SpecialDataGridViewColumn mdgvc;

            public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)        {            base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);            dgvtbec = DataGridView.EditingControl as DataGridViewTextBoxEditingControl;                        dgvc = this.OwningColumn;            if (dgvc is SpecialDataGridViewColumn)            {                mdgvc = dgvc as SpecialDataGridViewColumn;                dgvtbec.KeyUp += new KeyEventHandler(dgvtbec_KeyUp);            }        }        /// <summary>        /// 功能:焦点不用移到别的单元格里        /// (即我们不再依赖dataGridView1_CellBeginEdit或者是dataGridView1_CellValueChanged)        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        void dgvtbec_KeyUp(object sender, KeyEventArgs e)        {            mdgvc.DataGridViewColumnTextValue = dgvtbec.Text;            mdgvc.SpecialDataGridViewColumn_DataGridViewColumnKeyUp(sender, e);        }

        }


    最新回复(0)