我在数据表中有数据需要以这种方式对第一列进行排序:
A02 BLANK0010
D02 BLANK0007
B04 BLANK0011
G05 BLANK0012
C06 BLANK0014
E08 BLANK0013
F10 BLANK0016
H12 BLANK0015
B02 G112486
C02 G125259
E02 G125257
F02 G112492
G02 G125095
H02 G112489
A03 G125090
B03 G112499
C03 G125256
D03 G002007
E03 G112494
F03 G002005
G03 G112495
H03 G002008
A04 G115717
如果我进行常规排序,它将如下排序:A02,A03,A04。但我需要A02,B02,C02等......
我该怎么做>?到目前为止我的代码:
DataView view = dt.DefaultView; view.Sort =“position”;
答案 0 :(得分:2)
您需要进行自定义排序。有关提示,请参阅以下问题:DataView.Sort - more than just asc/desc (need custom sort)
您可能希望将第一列分成两个单独的列。
答案 1 :(得分:1)
可能需要重构但能解决问题。
//group by the rows by splitting values of column
var groupBy = table.AsEnumerable()
.GroupBy(o =>
Regex.Replace(o["position"].ToString(), @"[0-9]", ""));
var dataRows = Sort(groupBy);
以下是排序方法:
//yield the first row of each group
private static IEnumerable<DataRow> Sort(IEnumerable<IGrouping<string, DataRow>> groupByCollection)
{
//sort each character group(e.g. A,B) by integer part of their values
var groupings =
groupByCollection.Select(
o =>
new
{
o.Key,
Value = o.OrderBy(a => Regex.Replace(a["position"].ToString(), "[a-z]", "", RegexOptions.IgnoreCase)).ToArray()
}).ToArray();
int i = 0, j;
for (j = 0; j < groupings[i].Value.Length; j++,i=0)
for (i = 0; i < groupings.Length; i++)
{
yield return groupings[i].Value[j];
}
}
答案 2 :(得分:0)
尽可能:添加第一列第一个字母的附加列,然后按该列和第一列排序。
答案 3 :(得分:0)
一种原始但有效的方式(在这种情况下):
dv.Sort = substring(field,2,3)+ substring(field,1,1)