【问题标题】:DataFormatString from a dataset, by code数据集中的 DataFormatString,按代码
【发布时间】: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 定义吗?
  • 当然.. 它只有标签,因为我通过代码从数据库中获取每个数据

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


【解决方案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()
    

    与我的其他答案相同,我无法测试,所以请尝试并提供反馈。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 2022-12-10
      • 2010-11-02
      • 2019-08-11
      • 2019-01-08
      相关资源
      最近更新 更多