Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Create a custom DataGridViewColumn, datetimepicker и DBNull.Value - как? 
:(
    Опции темы
kulibin
Дата 26.5.2006, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



передрал стандартный пример CalendarColumn. Там, где значение не допускает dbnull всё ок. А вот есть у меня столбцы где допускается нул. Сделал чтобы чекбокс отображался в дейттаймпикере. Но при снятии чекбокса всёравно в ячейку пишется значение из дейттаймпикера. И ещё чекед чёто не пойму как привязать к конкретной ячейке.  Делаю так:
Код

 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;
            try
            { ctl.Value = (DateTime)this.Value; }
            catch (Exception ex) { ctl.Checked = false; }
        }

а значения null ctl.Value присвоить нельзя - т.к. нету такого в DateTime. А без этого никак.
Подскажите плз как уговорить его чтобы при снятии галки с чекбокса в текущую ячейку дата не писалась - чтобы её значение стало dbnull.value. И наоборот - если в ячейке dbnull.value чтобы дтпикер отображался со снятым чекбоксом. 
PM MAIL WWW ICQ   Вверх
kulibin
Дата 6.6.2006, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



а чё такая тишина? smile неужели так никто не делал - чтобы столбец в гриде был дейттаймпикерный и мог содержать dbnull.value? вроде ничего экзотического.
ну меня вроде осенило самого - токо никак не найду времени опробовать. надо наверное сделать класс-потомок от дейттаймпикера - и переписать в нём свойство value - так, чтобы если присваивается значение dbnull.value устанавливалось cheked=false и наоборот - чтобы если чекед=false - то get{return dbnull.value;}
токо тут одно слабое место есть smile - как разрешить присваивать дейттаймпикеру значение dbnull? ведь там тип данных datetime. этого момента я пока не понял smile. если кого раньше меня осенит - буду очень благодарен. 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 6.6.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



kulibin, DBNull присваивается не свойству контрола, а ячейке датасета (или на что он там bind-ится). 


--------------------
user posted image
PM MAIL WWW   Вверх
kulibin
Дата 6.6.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



в принципе так то оно так. ну допустим, что присваивать дейттаймпикеру cheked=false можно в InitializeEditingControl. А вот обратно как - т.е. из дейттаймпикера в ячейку гридвью. Т.е. надо куда-то вставить такую строку: if(this.value==dbnull.value){ctl.cheked=false;}else{this.value=ctl.value;}. Токо куда ето вставить шото я не врубаюсь smile
PM MAIL WWW ICQ   Вверх
kulibin
Дата 6.6.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



что-то никак я не домучаю этот календарколумн.
вот сделал так:
Код

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;
            try
            { ctl.Value = (DateTime)this.Value; }
            catch (Exception ex) 
            {
                if (((CalendarColumn)this.OwningColumn).Nulleble)
                { ctl.ShowCheckBox = true;  }
                ctl.Value = DateTime.Now;
                ctl.Checked = false;
            }
        }

токо как-то получается, что моё свойство вот это:
Код

public class CalendarColumn : DataGridViewColumn
    {
        private bool _Nulleble;
//вот это:
        public bool Nulleble { get { return _Nulleble; } set { _Nulleble = value; } }

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

я его устанавливаю в true - а потом ставлю брейкпойнт на InitializeEditingControl - и наблюдаю там почемуто false smile. никак что-то не пойму откудова хрень эта берётся. вроде честно всё должно быть.
Помогите плз  smile  smile  smile 
вот весь код календарколумна этого:
Код

using System;
using System.Windows.Forms;

namespace GTools
{
    public class CalendarColumn : DataGridViewColumn
    {
        private bool _Nulleble;
        public bool Nulleble { get { return _Nulleble; } set { _Nulleble = value; } }
        public CalendarColumn()
            : base(new CalendarCell())
        {
        }

        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 = "d";
            
        }

        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;
            try
            { ctl.Value = (DateTime)this.Value; }
            catch (Exception ex) 
            {
                if (((CalendarColumn)this.OwningColumn).Nulleble)
                { ctl.ShowCheckBox = true;  }
                ctl.Value = DateTime.Now;
                ctl.Checked = false;
            }
        }

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

    class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
    {
        DataGridView dataGridView;
        private bool valueChanged = false;
        int rowIndex;

        public CalendarEditingControl()
        {
            this.Format = DateTimePickerFormat.Short;
            

        }

        // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
        // property.
        public object EditingControlFormattedValue
        {
            get
            {
                if (this.Checked) { return this.Value.ToShortDateString(); }
                else { return null; }
            }
            set
            {
                String newValue = value as String;
                if (newValue != null)
                {
                    this.Value = DateTime.Parse(newValue);
                    this.Checked = true;
                }
                else if (this.ShowCheckBox) { this.Checked = false; }
                else { this.Value = DateTime.Now; }
            }
        }

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


Добавлено @ 18:44 
вот ещё странность одна. почемуто на ней мой календарколумн виден как datagridviewcolumn - тогда как остальное всё нормально: textboxcolumn, comboboxcolumn. Да - и свойство нулбл сразу после присваивания тоже наблюдается как true. т.е. я ещё вроде не полный идиот. хотя уже сомневаюсь smile.
ПОМОГИИИТЕЕЕЕ ! ! ! уже блин мозги из ушей брызжут - а никак не пойму в чём тут прикол smile
PM MAIL WWW ICQ   Вверх
kulibin
Дата 6.6.2006, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



забыл пикчерс. вот он:
user posted image 
PM MAIL WWW ICQ   Вверх
-ser-
Дата 7.6.2006, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



Цитата(kulibin @  26.5.2006,  10:38 Найти цитируемый пост)
Сделал чтобы чекбокс отображался в дейттаймпикере. 

вот тут ты асс. я даже не представляю как это. да и стоит ли смешивать одно с другим.

Цитата(kulibin @  26.5.2006,  10:38 Найти цитируемый пост)
И ещё чекед чёто не пойму как привязать к конкретной ячейке

перевожу для себя вопрос: как связать чекбокс с ячейкой.

ответ:
выдели отдельную колонку в датагриде под чекбокс и повесь на DataBindingComplete следующий код:
Код

        private void dgv_DataBindingComplete( object sender, DataGridViewBindingCompleteEventArgs e )
        {
            for( int i = 0; i < dgv.Rows.Count; i++ )
            {
               // допустим checkbox в первой колонке
                dgv[ 0, i ].ValueType = typeof( bool );
                dgv[ 0, i ].Value = false;
            }
        }

и, соответственно, на CellValueChanged:
Код

        private void dgv_CellValueChanged( object sender, DataGridViewCellEventArgs e )
        {
            if( e.ColumnIndex == 0 ) // допустим checkbox в первой колонке
            {
                for( int i = 0; i < dgv.Rows.Count; i++ )
                    if( dgv[ 0, i ].Value == null )
                        dgv[ 0, i ].Value = false;
            }
        }

и еще на CurrentCellDirtyStateChanged:
Код

        private void dgv_CurrentCellDirtyStateChanged( object sender, EventArgs e )
        {
            dgv.CommitEdit( DataGridViewDataErrorContexts.Commit );
        }

                

 


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
kulibin
Дата 7.6.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Цитата(-ser- @  7.6.2006,  07:51 Найти цитируемый пост)
Цитата(kulibin @  26.5.2006,  10:38 )    
Сделал чтобы чекбокс отображался в дейттаймпикере.  

вот тут ты асс. я даже не представляю как это. да и стоит ли смешивать одно с другим.


Цитата(kulibin @  26.5.2006,  10:38 )    
И ещё чекед чёто не пойму как привязать к конкретной ячейке    

перевожу для себя вопрос: как связать чекбокс с ячейкой.

на самом деле всё гораздо проще - в стандартном дейттаймпикере есть свойства showcheckbox и checked smile. Т.е. это стандартный функционал обычного дейттаймпикера - токо и всего smile. А мне нужно только им воспользоваться для того, чтобы если у меня имеется столбец с датой и он позволяет dbnull.value - чтобы дату туда можно было не только поставить - но и убрать. Ну тоисть со стандартным мс-ным примером CalendarColumn который этого не поддерживает получается такая петрушка: дату с помощью этого дейттаймпикера поставить можно - а вот убрать фигушки. А если например у меня суперпрограмма с заказами и там есть дата заказа - обязательная - и даты отгрузки и оплаты. Понятно что даты отгрузки и оплаты должны иметь возможность быть пустыми. Вот для этого мне и нужно свойство showcheckbox в дейттаймпикере увязать с AlowDbNull а cheked с dbnull.value. Вот такие пироги.

Теперь отчёт о проделаной работе smile. Отображать - скрывать чекбокс в зависимости от значения свойства столбца alowdbnull получилось - уря!!! Токо есть один побочный эффект: оно в основном работает нормально - но иногда происходит странный глюк и при снятии галочки с чекбокса значение даты из ячейки датагридвью не убирается smile. пол ночи просидел в попытках разобраться где жук этот сидит. Ничё не понял smile
Вот код. Не думаю что кто-то разберётся в нём раньше меня - но если вдруг так случится - то буду очень рад smile
Код

using System;
using System.Windows.Forms;
using System.Data;

namespace GTools
{
    public class CalendarColumn : DataGridViewColumn
    {
        
        public CalendarColumn()
            : base(new CalendarCell())
        {
        }

        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 = "d";
            
        }

        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;
            bool nlb = false;
            try
            {
                if (this.DataGridView.DataSource is DataView)
                { nlb = ((DataView)this.DataGridView.DataSource).Table.Columns[this.OwningColumn.Name].AllowDBNull; }
                else if (this.DataGridView.DataSource is BindingSource)
                { nlb = ((DataView)((BindingSource)this.DataGridView.DataSource).DataSource).Table.Columns[this.OwningColumn.Name].AllowDBNull; }
                else // datatable. если нет - то выдаём ошибку.
                { nlb = ((DataTable)this.DataGridView.DataSource).Columns[this.OwningColumn.Name].AllowDBNull; }
            }
            catch (Exception ex) { throw new Exception("такой datasource для datagridview не поддерживается классом calendarcolumn.", ex); }
            ctl.ShowCheckBox = nlb; 
            try
            { ctl.Value = (DateTime)this.Value; }
            catch (Exception ex) 
            {
                ctl.Value = DateTime.Now;
                ctl.Checked = false;
            }
        }

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

    class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
    {
        DataGridView dataGridView;
        private bool valueChanged = false;
        int rowIndex;

        public CalendarEditingControl()
        {
            this.Format = DateTimePickerFormat.Short;
            

        }

        // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
        // property.
        public object EditingControlFormattedValue
        {
            get
            {
                if (this.Checked) { return this.Value.ToShortDateString(); }
                else { return string.Empty; }
            }
            set
            {
                String newValue = value as String;
                if (newValue != null && newValue != string.Empty)
                {
                    this.Value = DateTime.Parse(newValue);
                    if (this.ShowCheckBox) { this.Checked = true; }
                }
                else if (this.ShowCheckBox) { this.Checked = false; }
                else { this.Value = DateTime.Now; }
            }
        }

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


Добавлено @ 10:11 
вот ключевой момент:
Код

 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;
            bool nlb = false;
            try
            {
                if (this.DataGridView.DataSource is DataView)
                { nlb = ((DataView)this.DataGridView.DataSource).Table.Columns[this.OwningColumn.Name].AllowDBNull; }
                else if (this.DataGridView.DataSource is BindingSource)
                { nlb = ((DataView)((BindingSource)this.DataGridView.DataSource).DataSource).Table.Columns[this.OwningColumn.Name].AllowDBNull; }
                else // datatable. если нет - то выдаём ошибку.
                { nlb = ((DataTable)this.DataGridView.DataSource).Columns[this.OwningColumn.Name].AllowDBNull; }
            }
            catch (Exception ex) { throw new Exception("такой datasource для datagridview не поддерживается классом calendarcolumn.", ex); }
            ctl.ShowCheckBox = nlb; 
            try
            { ctl.Value = (DateTime)this.Value; }
            catch (Exception ex) 
            {
                ctl.Value = DateTime.Now;
                ctl.Checked = false;
            }
        }


и вот:
Код

 // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
        // property.
        public object EditingControlFormattedValue
        {
            get
            {
                if (this.Checked) { return this.Value.ToShortDateString(); }
                else { return string.Empty; }
            }
            set
            {
                String newValue = value as String;
                if (newValue != null && newValue != string.Empty)
                {
                    this.Value = DateTime.Parse(newValue);
                    if (this.ShowCheckBox) { this.Checked = true; }
                }
                else if (this.ShowCheckBox) { this.Checked = false; }
                else { this.Value = DateTime.Now; }
            }
        }

Я по последнему куску этому никак не пойму момента одного: set вообще не работает никогда - на нём точка останова стоит хронически и не разу не сработала. Странно как-то. А get активно используется - и вроде честно работает. 
PM MAIL WWW ICQ   Вверх
-ser-
Дата 8.6.2006, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



Цитата(kulibin @  7.6.2006,  10:06 Найти цитируемый пост)
set вообще не работает никогда 

он не работает по той простой причине, что ты никогда не присваиваешь значение переменной через проперти, т.е.  
Код

EditingControlFormattedValue = ...

а скорей всего делаешь это напрямую ( я не смотрел твой код ).

это не ошибка, но разберись что тебе надо, и либо присваивай через проперти, либо выбрось вообще set из него, оставь его read-only.
 


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
kulibin
Дата 8.6.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Цитата(-ser- @  8.6.2006,  03:29 Найти цитируемый пост)
он не работает по той простой причине, что ты никогда не присваиваешь значение переменной через проперти, т.е.  

Фишка этого свойства в том, что оно не для меня - а для гридвью smile. Я и гетом его не пользуюсь - сам гридвью или какой-то его класс к нему обращается. Или calendarcell или calendarcolumn. Короче руками я его сам не трогаю - ни гет ни сет. Да и вообще слова public я тут не вижу:
Код

 class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl


-ser-,  очень ценю твоё желание помочь, правда. Но пытаться это сделать вообще не читая моего текста бесполезно smile
Я ведь собственно что пытаюсь сделать: не просто разово для одного датагридвью на одной форме эту функциональность прикрутить. Я делаю разновидность datagridviewcolumn - для многоразового использования. Вот так:
Код

            dgv.Columns.Remove(ord.ColName_Pdate);
            CalendarColumn PCol = new CalendarColumn();
            PCol.DataPropertyName = ord.ColName_Pdate;
            PCol.DisplayIndex = 5;
            PCol.Name = ord.ColName_Pdate;
            dgv.Columns.Add(PCol);

Ну и на сегодняшний день всё работает - токо при снятии галочки в 1 из 3-х случаев не убирается дата из ячейки smile. Вот такая ерунда. Возьми просто создай класс и код этот полностью скопируй туда - и попробуй использовать как описано выше со столбцом, допускающим значения нул. И тогда всё поймёш. Да и код сам то тоже наверняка пригодится. Не думаю что токо я один использую в гриде редактирование даты. 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1272 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.