формат dateTime в datagridview привязать к списку привязок

у меня есть: - Datagridview - BindingSource - BindingList

Я связываю BindingList с классом, который содержит свойство dateTime. В datagridview значение отображается как «дд / мм / гг чч: ММ». Я хочу отформатировать как «чч: ММ: сс».

Я знаю, что есть режим установки столбца:

dataGridView1.Columns["yourColumnName"].DefaultCellStyle.Format = "t"

Но мне было интересно, есть ли другой способ сделать это, в частности, двумя способами: 1) установить атрибут System.ComponentModel, о котором я подумал.

<System.ComponentModel.DataAnnotation.DisplayFormat(ApplyFormatInEditMode:= True, DataFormatString:= "{hh:MM:ss}")>

но это не работает.

2) установите все столбцы dateTime в Datagridview как 'DefaultCellStyle.Format = "t" Но мне не очень нравится это решение, потому что datagridview привязан к классу, и я бы хотел, чтобы весь формат уже планируется в классе с помощью атрибутов класса System.ComponentModel.

Есть ли у вас какие-нибудь советы?

P.S. Вот код:

Public dataGridView1 As New DataGridView
Public bs as New BindingSource
Public bl as New BindingList(Of MyClass)

...

bs.DataSource = bl
dataGridView1.DataSource = bs

...

Public Class myClass
  Sub New()
    bl.Add(ME)
  End Sub

  <System.ComponentModel.Browsable(True)>
  <System.ComponentModel.DataAnnotations.DisplayFormat(ApplyFormatInEditMode:=True, DataFormatString:= "hh:MM:ss")>
  Public Property myDate As DateTime
End Class

person Marcello    schedule 19.01.2018    source источник
comment
как вы привязываете datagridview   -  person Imran Ali Khan    schedule 19.01.2018
comment
У дат нет внутреннего формата, поэтому непонятно, о чем вы спрашиваете или что вы на самом деле не работаете со строкой (all the format it's already planned in the class)   -  person Ňɏssa Pøngjǣrdenlarp    schedule 19.01.2018
comment
когда я запускаю код, в datagridview появляется значение ячейки myDate в формате 'dd / mm / yyyy hh: MM', но я хочу, чтобы оно отображалось как 'hh: MM: ss', и я бы не устанавливал формат даты из свойства datagridview.DefaultCellStyle.Format, но как атрибут ComponentModel свойства myDate в myClass, как я показал в коде (с атрибутом DataAnnotation.DisplayFormat), но он не работает, как я написал.   -  person Marcello    schedule 20.01.2018
comment
Чтобы использовать аннотации данных, вы должны работать с фреймворком, который их ищет. Привязка данных Windows Forms НЕ является такой платформой.   -  person jmcilhinney    schedule 20.01.2018
comment
спасибо jmcilhinney, пожалуйста, вы можете объяснить мне эту концепцию? На этой веб-странице msdn.microsoft. com / en-us / library / объясняется, что dataAnnotations работает с Framework 4.5., я только что добавил ссылку на свою программу. Я не понимаю вас, когда вы сказали: «Привязка данных Windows Forms НЕ является такой платформой». Не могли бы вы помочь мне понять, что вы имеете в виду?   -  person Marcello    schedule 21.01.2018


Ответы (1)


Я нашел решение (на веб-странице MSDN).

Как объяснено на этой веб-странице

http://dailydotnettips.com/2011/02/05/how-to-change-gridview-column-alignments-for-dynamic-data-source/

Решением может быть обработка события CellFormatting, как описано в msdn здесь https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx

Итак, в коде:

Private Sub dataGridView1_CellFormatting(ByVal Sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles dataGridView1.CellFormatting
    With dataGridView1.Columns(e.ColumnIndex)
        'you can format just a column referring to the name of the property which with is binded'
        Select Case .Name
            Case "the_Name_Of_The_Property_Binded"
                e.CellStyle.Format = "hh:MM:ss"
        End Select
        'or you can format all the columns that are associated with a DateTime Property'
        If .ValueType = GetType(DateTime) Then
            e.CellStyle.Format = "hh:MM:ss"
        End If
    End With
End Sub

Но я думаю, что лучшее решение:

  • для формата по умолчанию обработайте событие dataGridView ColumnAdded (https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.columnadded(v=vs.110).aspx) (поэтому форматирование производится только один раз при добавлении столбцов).
  • а для форматирования отдельных ячеек, находящихся в состоянии "в процессе",
    может быть обработано событие CellFormatting.
person Marcello    schedule 23.01.2018