使用VB.NET中的dataview按日期排序

时间:2012-05-31 23:08:34

标签: vb.net sorting date dataview

嗨,并提前致谢:

所以我试图从SQL数据库中提取一个表并在" Date From" (DtFr)列,表示租约的开始。我觉得这很简单:

Dim XmlReader As New XmlNodeReader(xmlDoc)
Dim ds As New DataSet
ds.ReadXml(XmlReader)
myDt = ds.Tables("Cam")
If myDt IsNot Nothing AndAlso myDt.Rows.Count > 0 Then
    Dim dv As New DataView(myDt)
    dv.Sort = "DtFr ASC"
    myDt = dv.ToTable(False, "Id", "Name", "Amount", "Unpaid", "DtFr")
End If

但是你可能已经猜到这不起作用(新用户,不能张贴图片,它只是一张无序的日期图片)。

enter image description here

可能是因为在数据检索的某个时刻,它不再是Date的类型而且它是一个字符串或什么的?如果我使用更简单的日期,如2012年1月1日,1/2/2012年,1/3/2012或1/1/2012,2/1 / 2012,3 / 1/2012等,它排序正常,但是你会注意到上面的情况,如果我有不同的月份,它就会把它排除在外。

我已经尝试搞乱这种文化,认为它可能会在一年前的几个月对它们进行分类而无济于事......我不知所措,任何帮助,想法或对有用的东西的指导会很棒。

非常赞赏, 约什

编辑: 你是个天才,非常感谢。你对字符串值是正确的。我向数据表添加了一个名为sortDtFr的数据列,并将其作为数据类型提供给System.DateTime,并在行中进行迭代,将新列的值设置为等于作为Date的旧列的值。以下是感兴趣的人的代码:

ds.ReadXml(XmlReader)

myDt = ds.Tables("Cam")
myDt.Columns.Add(New DataColumn("sortDtFr", System.Type.GetType("System.DateTime")))
For Each row As DataRow In myDt.Rows
    row("sortDtFr") = CDate(row("DtFr"))
Next
If myDt IsNot Nothing AndAlso myDt.Rows.Count > 0 Then
    Dim dv As New DataView(myDt)
    dv.Sort = "sortDtFr ASC"
    myDt = dv.ToTable(False, "Id", "Name", "Amount", "Unpaid", "DtFr", "sortDtFr")
End If

1 个答案:

答案 0 :(得分:2)

您的记录以这种方式排序的原因是因为DataColumn Cam )的DataTable数据类型是< strong> System.String (默认情况下为 )。尝试将其更改为 System.DateTime