我有下面的数据表,如何按“今日”名称对数据表进行排序,例如,如果今天是星期一,它应该显示在数据表的末尾
我尝试了以下操作,但不起作用
Dim dv As DataView = dt3.DefaultView
dv.Sort = " DayLog desc"
Dim sortedDT = dv.ToTable()
答案 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,并在列表中排在首位