来自数据集的DataFormatString,按代码

时间:2011-10-14 00:46:07

标签: asp.net visual-studio ms-access

我从访问数据库中选择了一堆数据,其中一个字段是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日期字段,这样就不再出现这样的数据了 enter image description here

3 个答案:

答案 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()

与我的其他答案相同,我无法对此进行测试,因此请尝试并请提供反馈。

问候