จัดเรียงตามวันที่ด้วย dataview ใน VB.NET

สวัสดีและขอขอบคุณล่วงหน้า:

ดังนั้นฉันจึงพยายามดึงตารางจากฐานข้อมูล 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

แต่อย่างที่คุณอาจเดาได้ว่านี่ใช้งานไม่ได้ (ผู้ใช้ใหม่ ไม่สามารถโพสต์ภาพได้ มันเป็นเพียงภาพวันที่ที่ไม่เรียงลำดับ)

ป้อนคำอธิบายรูปภาพที่นี่

อาจเป็นเพราะในบางจุดของการดึงข้อมูลไม่ใช่ประเภท Date อีกต่อไปและเป็นสตริงหรืออะไรสักอย่าง? ถ้าฉันใช้วันที่ที่เรียบง่ายกว่า เช่น 1/1/2555, 2/1/2555, 3/1/2555 หรือ 1/1/2555, 2/1/2555, 1/3/2555 เป็นต้น มันก็ไม่เป็นไร แต่เป็น คุณจะสังเกตเห็นข้างต้น หากฉันมีหลายเดือน มันก็จะเรียงลำดับไม่เป็นระเบียบ

ฉันพยายามยุ่งกับวัฒนธรรม โดยคิดว่าอาจเป็นได้ว่าคัดแยกพวกมันในช่วงหลายเดือนก่อนปีโดยไม่เกิดประโยชน์... ฉันรู้สึกสับสน ความช่วยเหลือ แนวคิด หรือคำแนะนำใดๆ ที่เป็นประโยชน์คงจะดีมาก

ชื่นชมมากจอช

แก้ไข: คุณเป็นอัจฉริยะ ขอบคุณมาก คุณพูดถูกเกี่ยวกับค่าสตริง ฉันเพิ่มคอลัมน์ข้อมูลที่เรียกว่า sortDtFr ลงใน DataTable และกำหนดให้ System.DateTime เป็นประเภทข้อมูลและวนซ้ำตามแถวต่างๆ โดยตั้งค่าของคอลัมน์ใหม่ให้เท่ากับคอลัมน์เก่าที่แปลงเป็นวันที่ นี่คือรหัสสำหรับผู้ที่สนใจ:

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

person omgoshjosh    schedule 31.05.2012    source แหล่งที่มา


คำตอบ (1)


เหตุผลที่บันทึกของคุณถูกจัดเรียงในลักษณะนั้นก็เนื่องมาจาก ประเภทข้อมูล ของ DataColumn ของ DataTable (Cam) ของคุณคือ System.String (< em>โดยค่าเริ่มต้น) ลองเปลี่ยนเป็น System.DateTime

person John Woo    schedule 01.06.2012