现在的位置: 首页 > 综合 > 正文

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

2012年11月20日 ⁄ 综合 ⁄ 共 2866字 ⁄ 字号 评论关闭

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);
        }

    }

抱歉!评论已关闭.