Сохранение свойств в DesignMode
От: Interceptor Украина  
Дата: 08.12.09 02:39
Оценка:
Решил немного расширить функциональность стандартного DataGridView и добавить туда отображение изображений в заголовке колонок. Естественно захотелось чтобы эти колонки можно было в процессе разработки визуально привязать к картинкам.
Простейший вариант переопределенной колонки выглядит так:
    public class ucDataGridViewCheckBoxColumn : DataGridViewCheckBoxColumn, IDataGridViewBaseColumnWithImage
    {
        private int _imageIndex;
        public ucDataGridViewCheckBoxColumn() : base()
        {
            ImageIndex = -1;
        }

        public int ImageIndex { get { return _imageIndex; } set { _imageIndex = value; } }
    }

Определяем любую колонку datagridview как ucDataGridViewCheckBoxColumn, идем в ее свойства и видим, что ImageIndex == -1. Ок, меняем на наше значение. Нажимаем Ок. И что мы видим в следующий раз когда заходим в настройки? Верно! -1. Вопрос, где мой косяк?
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re: Сохранение свойств в DesignMode
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 08.12.09 11:32
Оценка:
 DesignerSerializationVisibilityAttribute
Posted via RSDN NNTP Server 2.1 beta
Re: Сохранение свойств в DesignMode
От: MozgC США http://nightcoder.livejournal.com
Дата: 08.12.09 12:26
Оценка: 6 (1)
Вам нужно переопределить метод Clone(), в котором устанавливать ваши дополнительные свойства. Кстати, даже в примере от microsoft'а где создается кастомный столбец для датагрида, проблема сериализации не решена.
В общем сделайте так:

public override object Clone()
{
    ucDataGridViewCheckBoxColumn col = base.Clone() as ucDataGridViewCheckBoxColumn;
    col.ImageIndex = ImageIndex;
    return col;
}

и все должно быть ок.
Re[2]: Сохранение свойств в DesignMode
От: Interceptor Украина  
Дата: 08.12.09 12:26
Оценка:
Здравствуйте, маген, Вы писали:


М>
 DesignerSerializationVisibilityAttribute

К сожалению, не работает:
    [DesignTimeVisible(false), ToolboxItem(false), Serializable]
    public class ucDataGridViewTextBoxColumn : DataGridViewTextBoxColumn
    {
        private int _imageIndex = -1;
        public ucDataGridViewTextBoxColumn()
        {
//            ImageIndex = -1;
        }
        [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content), EditorBrowsable(EditorBrowsableState.Always), DefaultValue(-1), Category("Appearance")]
        public int ImageIndex { get { return _imageIndex; } set { _imageIndex = value; } }
    }
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[3]: Сохранение свойств в DesignMode
От: MozgC США http://nightcoder.livejournal.com
Дата: 08.12.09 14:42
Оценка:
MC>Вам нужно переопределить метод Clone(), в котором устанавливать ваши дополнительные свойства. Кстати, даже в примере от microsoft'а где создается кастомный столбец для датагрида, проблема сериализации не решена.
MC>В общем сделайте так:

MC>public override object Clone()

MC>{
MC> ucDataGridViewCheckBoxColumn col = base.Clone() as ucDataGridViewCheckBoxColumn;
MC> col.ImageIndex = ImageIndex;
MC> return col;
MC>}


MC>и все должно быть ок.


А вот как переопределяется Clone() в DataGridViewImageColumn, возможно стоит сделать примерно так же:

public override object Clone() 
{
  DataGridViewImageColumn dataGridViewColumn;
  Type thisType = this.GetType();

  if (thisType == columnType) //performance improvement
  { 
    dataGridViewColumn = new DataGridViewImageColumn(); 
  }
  else 
  {
    // SECREVIEW : Late-binding does not represent a security thread, see bug#411899 for more info..
    //
    dataGridViewColumn = (DataGridViewImageColumn)System.Activator.CreateInstance(thisType); 
  }
  if (dataGridViewColumn != null) 
  { 
    base.CloneInternal(dataGridViewColumn);
    dataGridViewColumn.Icon = this.icon; 
    dataGridViewColumn.Image = this.image;
  }
  return dataGridViewColumn;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.