Как заставить пользовательские свойства DataGridViewColumn работать во время разработки?

Недавно я написал собственный DataGridViewColumn для размещения индикатора выполнения. Сам класс столбца имеет свойство, которое я хотел бы распространить на все ячейки столбца. Я использую этот код для его реализации: -

<DefaultValue(5I)> _
Public Property BlockWidth() As Integer
    Get
        Return _blockWidth
    End Get
    Set(ByVal value As Integer)
        _blockWidth = value

        Me.ColumnCells.ForEach(Sub(cell) cell.BlockWidth = value)
    End Set
End Property

И это:-

Private ReadOnly Property ColumnCells As IEnumerable(Of DataGridViewProgressBarCell)
    Get
        If Me.DataGridView IsNot Nothing Then
            Return Me.DataGridView.Rows.
                Cast(Of DataGridViewRow).
                Where(Function(r) TypeOf r.Cells.Item(Me.Index) Is DataGridViewProgressBarCell).
                Select(Function(r) DirectCast(r.Cells.Item(Me.Index), DataGridViewProgressBarCell))
        Else
            Return New DataGridViewProgressBarCell() {}
        End If
    End Get
End Property

Теперь это работает во время выполнения. Если я изменю свойство BlockWidth столбца во время выполнения, все ячейки столбца изменятся, чтобы отразить изменение свойства, но я не могу заставить это работать во время разработки. Во время разработки ячейка не изменяется, изменение свойства сохраняется, но ячейка не изменяется. Я перепробовал все способы обмана, и он отказывается работать. Пожалуйста, кто-нибудь может сказать мне, что я делаю неправильно?


person Niya    schedule 24.06.2014    source источник
comment
что вы подразумеваете под написанием пользовательского DataGridViewColumn? ты подклассировал обычный или как? где новая сетка и/или столбец в Class Lib?   -  person Ňɏssa Pøngjǣrdenlarp    schedule 24.06.2014


Ответы (2)


Попробуйте использовать подпрограмму _CellFormatting в вашем datagridview. Вы можете программно установить, что вы хотите отображать на дисплее.

Видеть:

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting(v=vs.110).aspx

Настройка и форматирование Datagridview

Надеюсь это поможет!

person alybaba726    schedule 24.06.2014

Неважно. Я понял. Мне пришлось установить свойство BlockWidth для объекта шаблона ячейки (через свойство CellTemplate класса столбца), переданного конструктору объекта столбца. Кроме того, я забыл клонировать свойство BlockWidth в классе ячеек индикатора выполнения.

<DefaultValue(5I)> _
Public Property BlockWidth() As Integer
    Get
        Return _blockWidth
    End Get
    Set(ByVal value As Integer)
        _blockWidth = value

        'For changes to be reflected at runtime
        Me.ColumnCells.ForEach(Sub(cell) cell.BlockWidth = value)

        'For changes to be reflected at design time
        Me.Template.BlockWidth = _blockWidth

        If Me.DataGridView IsNot Nothing Then
            Me.DataGridView.InvalidateColumn(Me.Index)
        End If
    End Set
End Property

Всем спасибо за комментарии и ответы. :)

person Niya    schedule 24.06.2014