【问题标题】:How to order Datatable by row value?如何按行值对数据表进行排序?
【发布时间】:2020-01-23 06:09:34
【问题描述】:

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

我尝试了以下方法,但它不起作用

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

【问题讨论】:

  • 你想对数据库表本身的行进行排序(硬方式)还是只在 gridview 中排序?您还可以在 sql 或 linq 请求中使用 orderby 对 DataSource 进行排序。仅对于 gridview,您可以使用排序方法使用数据网格行为:stackoverflow.com/questions/806725/… |或者让用户点击列进行排序:docs.microsoft.com/dotnet/framework/winforms/controls/…
  • 不,我想在数据表本身中对其进行排序,因为我使用图表来显示当天的数据,并且我希望今天的数据显示在图表的末尾
  • 要对数据库表结构本身中的行进行排序,您可以创建一个临时表,插入已排序的行,删除源表中的行,并在表中重新注入已排序的行。什么是 DB Server,如何访问它(什么是数据提供者)?
  • 关于排序本身,您可以实现排序来比较 DayOfWeek int 值或类似比较字符串名称之类的东西...docs.microsoft.com/dotnet/api/…
  • 是否有任何基础数据包含实际日期,而不仅仅是星期几?

标签: vb.net datatable


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

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

编辑

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

例如。 DayOfWeek 枚举上的星期六索引为 6,因此 6 + 7(星期几)= 13 然后减去 6 = 7 最后 7 mod 7 为 0,因此星期六的新索引变为 0 并在列表中排在第一位

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    相关资源
    最近更新 更多