2011-07-17 11 views
3

私は、データの次の行を含む列を持つGridViewコントロールを持っている:ソート文字列データを数値(ASP.NET C#の)

1 
    2a 
    2b 
    6 
    8a 
    10a 

私はそれをソートするためにクリックすることができるように列のヘッダーがsortExpressionを持っています

私はこのデータをソートした場合は、私がこの順でそれを得る:

1 
    10a 
    2a 
    2b 
    6 
    8a 

は、10aの行があるため1

のアップになる..where

数値でソートしたいのですが、値は文字列です。 数字でソートし、最後にアルファベットで並べ替える必要があります(文字がある場合)

データソースから引き戻されたデータに対して、これを行うにはどうすればよいですか? これはグリッドビューにあることに注意してください。

+0

6年後....私はちょうどここでやるべきことは代わりにコードでそれをやろうとのクエリを変更しました。文字列を数字列と文字列に簡単に分割して、簡単なORDER BYの数字、文字列を入力するだけでした(もちろん、私が質問したときにデータを取得するためにSQLクエリを使用しているとは特に言いませんでしたこの質問) – abney317

答えて

0

は、数値と文字列を分割し、あなたはあなたが文字列のリストを持っている場合は

+0

2つの異なる列に?私は同じ列でそれを並べ替えることができるようにしたいです – 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

関連する問題