我使用此示例在winforms应用程序中为DataGridView创建DateTime列。
http://msdn.microsoft.com/en-us/library/7tas5c80.aspx
我可以在Windows窗体设计器中看到新列,并将其添加到现有的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
然而,由于这只是一个黑客攻击,我想知道哪个是“应该如何”将默认的cellstyle从DataGridViewColumn应用到其单元格。有什么建议吗?
答案 0 :(得分:0)
我会删除构造函数。问题是构造函数是隐含的创建样式。因此,将不使用默认样式的格式。这实际上是一种“资源匮乏”,因为每个单元格都有自己的风格,而不是所有的单元格都有相同的风格。
删除构造函数将解决您的问题,但如果您希望默认为“短日期”,则可能覆盖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