2011-07-17 141 views
3

我有一个GridView包含以下数据列列:排序字符串数据在数值上(ASP.NET C#)

1 
    2a 
    2b 
    6 
    8a 
    10a 

列的标题有一个的SortExpression这样我就可以点击排序呢

如果我做这个排序数据,我得到它的顺序是:

1 
    10a 
    2a 
    2b 
    6 
    8a 

..where的10A一行来因为1

我希望它按数字排序,但我的值是字符串。 数据需要按数字排序,然后按字母顺序排序(如果有字母)

如何才能对数据从数据源中拉出来执行此操作? 请记住,这是在一个gridview中。

+0

6年后....我应该只是在这里做的是改变,而不是试图做到这一点的代码查询。可以很容易地将字符串(如下面的Ankit所示)拆分为数字和字母列,并且只是做了一个简单的ORDER BY数字,字母(当然,我并没有真正指定我使用SQL查询来拉取数据这个问题) – abney317

回答

0

拆分的数量和字符串,就可以实现你想要

+0

分成两个不同的列?我想能够在同一列中对它进行排序 – abney317

3

如果你有一个字符串列表什么,那么你可以使用自定义比较排序。下面是一些代码吧:

public static void NumericalSort(List<string> l) 
{ 
    Regex rgx = new Regex("([^0-9]*)([0-9]+)"); 
    l.Sort((a, b) => 
    { 
     var ma = rgx.Matches(a); 
     var mb = rgx.Matches(b); 
     for (int i = 0; i < ma.Count; ++i) 
     { 
      int ret = ma[i].Groups[1].Value.CompareTo(mb[i].Groups[1].Value); 
      if (ret != 0) 
       return ret; 

      ret = int.Parse(ma[i].Groups[2].Value) - int.Parse(mb[i].Groups[2].Value); 
      if (ret != 0) 
       return ret; 
     } 

     return 0; 
    }); 
} 

static void Main(string[] args) 
{ 
    List<string> l = new string[] { "1", "2a", "2b", "6", "8a", "10a" }.ToList(); 

    NumericalSort(l); 

    foreach (var item in l) 
     Console.WriteLine(item); 
} 
+0

你能给我一个我如何实现这个到gridview的例子吗? – abney317