如何按行值排序Datatable?

时间:2019-09-23 07:56:30

标签: vb.net datatable

我有下面的数据表,如何按“今日”名称对数据表进行排序,例如,如果今天是星期一,它应该显示在数据表的末尾

我尝试了以下操作,但不起作用

Dim dv As DataView = dt3.DefaultView
    dv.Sort = " DayLog desc"
    Dim sortedDT = dv.ToTable()

enter image description here

1 个答案:

答案 0 :(得分:1)

自从我做过一些VB以后,您确定可以执行以下操作吗?

Dim data() AS DataRow = dt.Select()
Dim sortedData = data.OrderBy(Function(x) CInt([Enum].Parse(GetType(DayOfWeek), x.Item("DayLog"))) )

Dim sortedDataTable = dt.Clone()

For Each row In sortedData
    sortedDataTable.ImportRow(row)
Next

假设您一周中的几天的拼写是100%正确

如果您具有星期几的字符串值或int值,则可以使用模数调整排序

例如

Dim todayStringVal = "Tuesday" // say you have this value from somewhere
Dim today = CInt([Enum].Parse(GetType(DayOfWeek), todayStringVal)) // convert to day of the week enum
Dim sortedData = data.OrderBy(Function(x) CInt(([Enum].Parse(GetType(DayOfWeek), x.Item("DayLog")) + 7 - today)) Mod 7) // Apply sorting

最后,如果您希望以上代码段进行排序,以使today的值位于列表的末尾,只需将OrderBy更改为OrderByDescending

编辑

即使today的索引从0开始,也要确保DayOfWeek的值首先出现在列表中,您需要+ 7并减去索引,然后再乘以7以得到正确的索引。排序

例如DayOfWeek枚举上周六的索引为6,因此6 + 7(一周中的天数)= 13,然后减去6 = 7最终7 mod 7为0,因此周六的新索引变为0,并在列表中排在首位