Re[2]: EditMask в DataGrid
От: Аноним  
Дата: 23.08.06 10:01
Оценка:
использую такой код:
public class DataGridViewMaskedTextBoxEditingControl : MaskedTextBox, IDataGridViewEditingControl
    {

        public DataGridViewMaskedTextBoxEditingControl () :base()
        {}
#region IDataGridViewEditingControl Members

        public Cursor EditingPanelCursor
        {
            get { return this.Cursor; }
        }

        private DataGridView dataGrid;
        public DataGridView EditingControlDataGridView
        {
            get
            {
                return dataGrid;
            }

            set
            {
                dataGrid=value;
            }
        }

        public object EditingControlFormattedValue
        {
            get { return this.Text; }
            set { this.Text = value.ToString(); }
        }


        public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
        {
            return EditingControlFormattedValue;
        }

        public bool EditingControlWantsInputKey(Keys keyData, bool dataGridViewWantsInputKey)
        {
            switch ((keyData & Keys.KeyCode))
            {
                case Keys.Prior:
                case Keys.Next:
                    if (this.bValueChanged)
                    {
                        return true;
                    }
                    break;

                case Keys.End:
                case Keys.Home:
                    if (this.SelectionLength != this.Text.Length)
                    {
                        return true;
                    }
                    break;

                case Keys.Left:
                    if (((this.RightToLeft == RightToLeft.No) && ((this.SelectionLength != 0) || (base.SelectionStart != 0))) || ((this.RightToLeft == RightToLeft.Yes) && ((this.SelectionLength != 0) || (base.SelectionStart != this.Text.Length))))
                    {
                        return true;
                    }
                    break;

                case Keys.Up:
                    if ((this.Text.IndexOf("\r\n") >= 0) && ((base.SelectionStart + this.SelectionLength) >= this.Text.IndexOf("\r\n")))
                    {
                        return true;
                    }
                    break;

                case Keys.Right:
                    if (((this.RightToLeft == RightToLeft.No) && ((this.SelectionLength != 0) || (base.SelectionStart != this.Text.Length))) || ((this.RightToLeft == RightToLeft.Yes) && ((this.SelectionLength != 0) || (base.SelectionStart != 0))))
                    {
                        return true;
                    }
                    break;

                case Keys.Down:
                    {
                        int num1 = base.SelectionStart + this.SelectionLength;
                        if (this.Text.IndexOf("\r\n", num1) != -1)
                        {
                            return true;
                        }
                        break;
                    }
                case Keys.Delete:
                    if ((this.SelectionLength > 0) || (base.SelectionStart < this.Text.Length))
                    {
                        return true;
                    }
                    break;

                case Keys.Return:
                    if ((keyData & (Keys.Alt | Keys.Control | Keys.Shift)) == Keys.Shift)
                    {
                        return true;
                    }
                    break;
            }
            return !dataGridViewWantsInputKey;

        }

        public void PrepareEditingControlForEdit(bool selectAll)
        {
            if(selectAll)
                this.SelectAll();
        }
        public bool RepositionEditingControlOnValueChange
        {
            get { return false; }
        }

        private int m_nRowIndex;
        public int EditingControlRowIndex
        {
            get
            {
                return m_nRowIndex;
            }

            set
            {
                m_nRowIndex = value;
            }
        }


        public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
        {
            //this.TextAlign = dataGridViewCellStyle.Alignment;
            this.Font = dataGridViewCellStyle.Font;
            this.ForeColor = dataGridViewCellStyle.ForeColor;
            this.BackColor = dataGridViewCellStyle.BackColor;
        }
        bool bValueChanged;
        public bool EditingControlValueChanged
        {
            get
            {
                return bValueChanged;
            }

            set
            {
                bValueChanged=value;
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            bValueChanged=true;
            this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
            base.OnTabIndexChanged(e);
        }


        #endregion
    }
    public class DataGridViewMaskedTextBoxCell : DataGridViewTextBoxCell
    {
        public DataGridViewMaskedTextBoxCell(): base()
        { }
        public override Type EditType
        {
            get { return typeof(DataGridViewMaskedTextBoxEditingControl); }
        }


        public override object Clone()
        {
            DataGridViewMaskedTextBoxCell ret = base.Clone() as DataGridViewMaskedTextBoxCell;
            if (ret != null)
            {
                ret.m_strMask = m_strMask;
                ret.m_strPromt = m_strPromt;
                ret.m_eTextAlign = m_eTextAlign;
            }
            return ret;
        }

        string m_strMask;
        public string MaskText
        {
            get { return m_strMask; }
            set { m_strMask = value; }
        }
        char m_strPromt;
        public char Promt
        {
            get { return m_strPromt;}
            set { m_strPromt = value; }
        }
        HorizontalAlignment m_eTextAlign;
        public HorizontalAlignment TextAlign
        {
            get { return m_eTextAlign;}
            set { m_eTextAlign = value; }
        }

        public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
        {
            base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
            DataGridViewMaskedTextBoxEditingControl ctrl = this.DataGridView.EditingControl as DataGridViewMaskedTextBoxEditingControl;
            if (ctrl != null)
            {
                ctrl.Mask = m_strMask;
                ctrl.PromptChar = m_strPromt;
                ctrl.TextAlign = m_eTextAlign;
                ctrl.Text = initialFormattedValue.ToString();
                //ctrl.BorderStyle = BorderStyle.None;
            }
        }
    }
    public class DataGridViewMaskedTextBoxColumn : DataGridViewColumn
    {
        public DataGridViewMaskedTextBoxColumn():base()
        {
            CellTemplate = new DataGridViewMaskedTextBoxCell();
        }
        

        [System.ComponentModel.Editor("System.Windows.Forms.Design.MaskPropertyEditor, System.Design, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor)), System.ComponentModel.DefaultValue("")]
        public string Mask
        {
            get
            {
                DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
                if (Cell != null) return Cell.MaskText;
                return "";
            }
            set
            {
                DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
                if (Cell != null)
                    Cell.MaskText = value;
            }
        }
        [DefaultValue('\0')]
        public char Promt
        {
            get
            {
                DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
                if (Cell != null) return Cell.Promt;
                return '\0';
            }
            set
            {
                DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
                if (Cell != null)
                    Cell.Promt = value;
            }
        }
        [DefaultValue(0)]
        public HorizontalAlignment TextAlign
        {
            get{
                DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
                if (Cell != null) return Cell.TextAlign;
                return HorizontalAlignment.Left;}
            set
            {
                DataGridViewMaskedTextBoxCell Cell = CellTemplate as DataGridViewMaskedTextBoxCell;
                if (Cell != null)
                    Cell.TextAlign = value;
            }
        }
    }





данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.