datagridview применить стиль ячейки к клеткам - PullRequest
0 голосов
/ 03 февраля 2010

Я использовал этот пример для создания столбца DateTime для DataGridView в моем приложении winforms.

http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

Я вижу новый столбец в конструкторе Windows Forms и добавляю его в существующий DataGridView. Однако я хочу иметь возможность изменять формат отображения при изменении «DefaultCellStyle» в конструкторе.

Сгенерированный дизайнером код выглядит так:

    DataGridViewCellStyle1.Format = "t"
    DataGridViewCellStyle1.NullValue = Nothing
    Me.colDate.DefaultCellStyle = DataGridViewCellStyle1
    Me.colDatum.Name = "colDate"
    Me.colDatum.Resizable = System.Windows.Forms.DataGridViewTriState.[False]

Что хорошо. Но так как код DataGridViewCalendarCell делает это в конструкторе:

    Public Sub New()
        Me.Style.Format = "d"
    End Sub

Формат никогда не меняется на «t» (формат времени). Я не узнал, как применить формат из столбца-владельца для использования этого woraround atm:

    Public Overrides Function GetInheritedStyle _
            (ByVal inheritedCellStyle As _
                  System.Windows.Forms.DataGridViewCellStyle, _
            ByVal rowIndex As Integer, ByVal includeColors As Boolean) _
    As System.Windows.Forms.DataGridViewCellStyle

        If Me.OwningColumn IsNot Nothing Then
            Me.Style.Format = Me.OwningColumn.DefaultCellStyle.Format
        End If

        Return MyBase.GetInheritedStyle(_
            inheritedCellStyle, rowIndex, includeColors)

    End Function

Однако, так как это всего лишь хак, я хочу знать, как это «как это сделать», чтобы применить стиль ячейки по умолчанию из DataGridViewColumn к его ячейкам. Есть предложения?

1 Ответ

0 голосов
/ 24 марта 2010

Я бы удалил конструктор. Проблема в том, что конструктор создает безупречность стиля. Следовательно, формат стиля по умолчанию не будет использоваться. На самом деле это «боров ресурсов», потому что у каждой ячейки будет свой стиль, а не у всех ячеек с одинаковым стилем.

Удаление конструктора решит вашу проблему, но если вы хотите использовать по умолчанию «короткую дату», тогда, возможно, лучше переопределить GetFormattedValue. Например, следующий пример. Я хочу подчеркнуть, что это только пример. Вы должны проработать детали.

    Protected Overrides Function GetFormattedValue( _
        ByVal value As Object, _
        ByVal rowIndex As Integer, _
        ByRef cellStyle As System.Windows.Forms.DataGridViewCellStyle, _
        ByVal valueTypeConverter As System.ComponentModel.TypeConverter, _
        ByVal formattedValueTypeConverter As System.ComponentModel.TypeConverter, _
        ByVal context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object

        If (cellStyle IsNot Nothing) OrElse (String.IsNullOrEmpty(cellStyle.Format)) Then
            'no format specified, so default to short date
            cellStyle.Format = "d"
        End If

        Return MyBase.GetFormattedValue(value, rowIndex, cellStyle, valueTypeConverter, formattedValueTypeConverter, context)

    End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...