datagridview 将单元格样式应用于单元格
Posted
技术标签:
【中文标题】datagridview 将单元格样式应用于单元格【英文标题】:datagridview apply cellstyle to cells 【发布时间】:2010-02-03 17:03:49 【问题描述】:我使用此示例在我的 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
但是,由于这只是一个技巧,我想知道将 DataGridViewColumn 中的默认单元格样式应用于其单元格的“应该如何”完成的方式。有什么建议吗?
【问题讨论】:
【参考方案1】:我会删除构造函数。问题是构造函数隐含地创建了一种样式。因此,不会使用默认样式的格式。这实际上是一种“资源消耗”,因为每个单元格都有自己的样式,而不是所有单元格共享相同的样式。
删除构造函数将解决您的问题,但如果您想默认为“短日期”,那么可能覆盖 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
【讨论】:
以上是关于datagridview 将单元格样式应用于单元格的主要内容,如果未能解决你的问题,请参考以下文章
如何在 vb.net 中将 datagridview 单元格样式从默认文本框更改为组合框?
c# datagridview 单个 单元格的样式(即字号或者字体颜色)发生改变时候,触发啥事件???