数据集中的 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:字段必须是数字

日期时间的 DataFormatString

在 DataFormatString 之外自定义 DisplayFormat

DataFormatString 上的自定义 NumberFormatInfo

为什么DisplayFormat DataFormatString不起作用?

输入三个实数,编程判断他们是不是能构成三角形