Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как раскрыть datetimepicker внутри datagridview

47K
15 апреля 2009 года
nobrain
2 / / 14.04.2009
При выполнении следующего кода который призван добавить строчку и открыть datetimepicker для изменения даты
Код:
OtchetData.Rows.Add(new object[] { DateTime.Now, delo_id });
           OtchetData.CurrentCell = OtchetData.Rows[OtchetData.Rows.Count - 1].Cells[0];
           DataGridViewCellStyle style = new DataGridViewCellStyle();
                try
                {
               
  ((CalendarEditingControl)((CalendarCell)OtchetData.SelectedCells[0]).GetControl(1, "dd.mm.yyyy", style)).Focus();
                }
                catch(Exception ee)
                {
           
                }
                 
                SendKeys.Send("{BACKSPACE}");
            SendKeys.Send("{F4}");


Получаю следующее исключение:"Операция является недопустимой из-за текущего состояния объекта."
Стандартный грид не поддерживает datetimepicker, поэтому пришлось полазить по сети в поисках решения, вот что я нашел:

Код:
CalendarColumn col = new CalendarColumn("dd.mm.yyyy");
            col.DataPropertyName = "date";
            col.HeaderText = "Дата включения в отчет";
            col.Width = 234;
            this.OtchetData.Columns.Add(col);
            this.OtchetData.Columns.Add(new DataGridViewColumn(new DataGridViewTextBoxCell()));
 


 public class CalendarColumn : DataGridViewColumn
    {

        public CalendarColumn()
            : base(new CalendarCell())
        {

        }

        public CalendarColumn(string frm)
            : base(new CalendarCell(frm))
        {

        }

        public void setValue(string frm)
        {

            base.CellTemplate.Value = frm;

        }

        public override DataGridViewCell CellTemplate
        {

            get
            {

                return base.CellTemplate;

            }

            set
            {

                // Ensure that the cell used for the template is a CalendarCell.

                if (value != null &&

                !value.GetType().IsAssignableFrom(typeof(CalendarCell)))
                {

                    throw new InvalidCastException("Must be a CalendarCell");

                }

                base.CellTemplate = value;

            }

        }

    }

    public class CalendarCell : DataGridViewTextBoxCell
    {


        public CalendarCell()
            : base()
        {

            // Use the short date format.

            this.Style.Format = "H:mm:ss dddd MMMM dd, yyyy";

        }

        public CalendarCell(string frm)
            : base()
        {

            // Use the short date format.

            this.Style.Format = frm;

        }

        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);
            CalendarEditingControl ctl = DataGridView.EditingControl as CalendarEditingControl;

            ctl.Value = (DateTime)this.Value;

        }
//===============================================================================================================
        public Object GetControl(int rowIndex, object

          initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
        {

            // Set the value of the editing control to the current cell value.

            base.InitializeEditingControl(rowIndex, initialFormattedValue,

            dataGridViewCellStyle);
            CalendarEditingControl ctl = DataGridView.EditingControl as CalendarEditingControl;

           // ctl.Value = (DateTime)this.Value;
            return ctl;
        }


//==============================================================================================================
        public override Type EditType
        {

            get
            {

                // Return the type of the editing contol that CalendarCell uses.

                return typeof(CalendarEditingControl);

            }

        }

        public override Type ValueType
        {

            get
            {

                // Return the type of the value that CalendarCell contains.

                return typeof(DateTime);

            }

        }

        public override object DefaultNewRowValue
        {

            get
            {

                // Use the current date and time as the default value.

                return DateTime.Now;

            }

        }

    }

    class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
    {

        DataGridView dataGridView;

        private bool valueChanged = false;

        int rowIndex;

        public CalendarEditingControl()
        {

            this.Format = DateTimePickerFormat.Custom;

        }


        // Implements the IDataGridViewEditingControl.EditingControlFormattedValue

        // property.
        /*
        public object EditingControlFormattedValue
        {

            get
            {

                return this.Value.ToShortDateString();

            }

            set
            {

                String newValue = value as String;

                if (newValue != null)
                {

                    this.Value = DateTime.Parse(newValue);

                }

            }

        }
         */

        // Implements the
        public object EditingControlFormattedValue
{
  get
  {
    return this.Value.ToShortDateString();
  }
  set {
      String newValue = value as String;

      if (newValue != null)
      {

          this.Value = DateTime.Parse(newValue);

      }
  }
}

        // IDataGridViewEditingControl.GetEditingControlFormattedValue method.

        public object GetEditingControlFormattedValue(

        DataGridViewDataErrorContexts context)
        {

            return EditingControlFormattedValue;

        }

        // Implements the

        // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.

        public void ApplyCellStyleToEditingControl(

        DataGridViewCellStyle dataGridViewCellStyle)
        {

            this.Font = dataGridViewCellStyle.Font;

            this.CalendarForeColor = dataGridViewCellStyle.ForeColor;

            this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;

        }

        // 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:

                case Keys.Tab:

                    return true;

                default:

                    return false;

            }

        }

        // 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;

            }

        }

        protected override void OnValueChanged(EventArgs eventargs)
        {

            // Notify the DataGridView that the contents of the cell

            // have changed.

            valueChanged = true;

            this.EditingControlDataGridView.NotifyCurrentCellDirty(true);

            base.OnValueChanged(eventargs);

        }

    }

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог