数据集中的 DataFormatString,按代码
Posted
技术标签:
【中文标题】数据集中的 DataFormatString,按代码【英文标题】:DataFormatString from a dataset, by code 【发布时间】:2011-10-14 00:46:06 【问题描述】:我从我的访问数据库中选择了一堆数据,其中一个字段是日期时间字段。
我试图以 GridView 的格式显示它,但是当我尝试时:
dtlJob.DataSource = genericDataSet
dtlJob.Fields(2).DataFormatString = "0:d"
dtlJob.DataBind()
我在第 2 行收到此错误
Error 2 'DataFormatString' is not a member of 'System.Web.UI.WebControls.DataControlField'.
如何格式化我的数据?
编辑
这是我想要炫耀的 DetailsGridView
<asp:DetailsView ID="dtlJob" runat="server" Height="50px" Width="125px">
</asp:DetailsView>
它只有标签,因为我通过代码从数据库中获取每个数据。但我想格式化 Data
日期字段,它看起来像这样,不再有哪些数据
【问题讨论】:
您能从 ASPX 文件中发布您的 GridView 定义吗? 当然.. 它只有标签,因为我通过代码从数据库中获取每个数据 【参考方案1】:您必须像下面的代码一样创建一个 BoundField。
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="false" Height="50px" Width="125px">
<Fields>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Age" HeaderText="Age" />
<asp:BoundField DataField="Birth" HeaderText="Birth" DataFormatString="0:d" />
</Fields>
</asp:DetailsView>
希望对你有所帮助。
维森特
【讨论】:
我做到了,但字段重复 数据字段值与数据集中的字段名称匹配时是否应该格式化?【参考方案2】:fields 属性是只读的,所以除了在构造函数中你不能修改它。 请注意,我没有测试过这个解决方案,bt 这是我认为你必须做的。
因此,您必须创建一个新类,该类继承自详细视图并使用其自己的私有 _fields 字段隐藏 Fields 属性:
Imports System.Web.UI.WebControls
Public Class CustomDetailsView
Inherits DetailsView
Private _fields As System.Web.UI.WebControls.DataControlFieldCollection
Public Shadows Property Fields As System.Web.UI.WebControls.DataControlFieldCollection
Get
Return _fields
End Get
Set(ByVal value As System.Web.UI.WebControls.DataControlFieldCollection)
_fields = value
End Set
End Property
End Class
然后你有下面的代码,创建一个 CustomDetailsView 对象,告诉它它的数据源是数据集,格式化第二列字段,并在绑定数据之前将所有这些信息提供给 web 表单上的 detaisview。
Dim myDetailsView = New CustomDetailsView
myDetailsView.DataSource = genericDataSet
CType(myDetailsView.Fields(1), BoundField).DataFormatString = "0:d"
dtlJob = myDetailsView
dtlJob.DataBind()
BoundField 的基本类型是DataControlField,所以你可以写CType 行。 我现在无法对此进行测试,请执行此操作并发布反馈。如果它不起作用,它可能是答案的开始。
问候
【讨论】:
【参考方案3】:这是另一种解决方案(尚未测试)。这里还是新建一个继承DetailsView的类,在构造函数中访问fields变量:
Imports Microsoft.VisualBasic
Imports System.Collections.Generic
Public Class _CustomDetailsView
Inherits DetailsView
Public Sub New(ByVal Columns As List(Of String))
For Each item As String In Columns
Dim bfield As New BoundField
If Not String.IsNullOrWhiteSpace(item) Then
bfield.DataFormatString = item
Else
bfield.DataFormatString = ""
End If
Me.Fields.Add(bfield)
Next
End Sub
End Class
然后,您创建一个包含每列所需格式的字符串列表。然后,通过在构造函数中传递此字符串列表来创建 _CustomDetailsView。 接下来为 DtlJob 分配 _CustomDetailsView 对象,最后提供数据源并进行数据绑定:
Dim DataFieldStyles = New List(Of String)
' First column: Default style
' Second column: Date format
' Third : Currency Format
' Fourth : Default style
DataFieldStyles.AddRange(New String() "", "0:d", "0:c", "")
Dim My_DetailsView As _CustomDetailsView = New _CustomDetailsView(DataFieldStyles)
dtlJob = My_DetailsView
dtlJob.DataSource = genericDataSet
dtlJob.DataBind()
与我的其他答案相同,我无法测试,所以请尝试并提供反馈。
问候
【讨论】:
以上是关于数据集中的 DataFormatString,按代码的主要内容,如果未能解决你的问题,请参考以下文章
在 DataFormatString 之外自定义 DisplayFormat
DataFormatString 上的自定义 NumberFormatInfo