我有一个我正在阅读的txt文件看起来像这样...
Acct |Name |Date |Country
11111,FirstLast,01/01/2015,United States
11111,FirstLast,,
11111,,01/01/2015,
22222,FirstLast,02/02/2015,Kuwait
22222,FirstLast,,
22222,,02/02/2015,
33333,FirstLast,02/02/2015,France
33333,FirstLast,,
33333,,02/02/2015,
我正在创建一个dataTable来填充这些数据,并添加一个名为“LINE”的列来跟踪每个帐户有多少行数据。然后我做一个dataView排序,就像这样排序:
dataView.Sort = "Acct ASC, Line ASC, Country ASC"
我的输出按行和行#排序,但不按国家排序。所以我回来了......
Acct |Name |Date |Country |Line
11111,FirstLast,01/01/2015,United States,1
11111,FirstLast,,,2
11111,,01/01/2015,,3
22222,FirstLast,02/02/2015,Kuwait,1
22222,FirstLast,,,2
22222,,02/02/2015,,3
33333,FirstLast,02/02/2015,France,1
33333,FirstLast,,,2
33333,,02/02/2015,,3
我想要回来的是这个,因为主要的是保持相同的acct#记录在一起,同时按国家升序排序......
Acct |Name |Date |Country |Line
33333,FirstLast,02/02/2015,France,1
33333,FirstLast,,,2
33333,,02/02/2015,,3
22222,FirstLast,02/02/2015,Kuwait,1
22222,FirstLast,,,2
22222,,02/02/2015,,3
11111,FirstLast,01/01/2015,United States,1
11111,FirstLast,,,2
11111,,01/01/2015,,3
然后我意识到显然这不起作用,因为帐号在分拣中优先。
最大的问题是我必须使用.NET 2.0,是否有某种方法可以对这些进行分组并按国家/地区排序?
答案 0 :(得分:0)
理想情况下,这种类型的排序可以在显示中实现,例如GridView / DataGridView,通过 Acct 对字段进行分组,然后在组中排序为 Country Desc,Line Asc
如果您希望在DataTable中对其进行排序,则可以通过向DataTable添加另一个虚拟列来完成。
全部放在一起:
dt1.Columns.Add("Grp1")
dt1.DefaultView.Sort = "Acct Asc, Country Desc"
For i = 0 to dt1.Rows - 1
If i > 0 AndAlso dt1.Rows(i).Item("Country").ToString.Length = 0 Then
dt1.Rows(i).Item("Country") = dt1.Rows(i - 1).Item("Country").ToString
End If
dt1.Rows(i).Item("Grp1") = dt1.Rows(i).Item("Country").ToString & " - " & dt1.Rows(i).Item("Acct").ToString
Next
dt1.DefaultView.Sort = "Grp1 Asc, Line Asc"