我从访问数据库中选择了一堆数据,其中一个字段是DateTime字段。
我试图在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
日期字段,这样就不再出现这样的数据了
答案 0 :(得分:5)
您必须像下面的代码一样创建一个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>
我希望有所帮助。
森特
答案 1 :(得分:1)
fields属性是readonly,因此除了在构造函数中之外,您无法修改它。 请注意我没有测试过这个解决方案,这是我认为你必须要做的。
因此,您必须使用自己的私有_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行。 我现在无法测试,请执行此操作并发布反馈。如果它不起作用,它可能是一个回答的开始。
问候
答案 2 :(得分:1)
这是另一种解决方案(仍未经过测试)。在这里,您仍然创建一个继承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()
与我的其他答案相同,我无法对此进行测试,因此请尝试并请提供反馈。
问候