以数字方式排序字符串数据(ASP.NET C#)

时间:2011-07-17 18:55:42

标签: c# asp.net sorting gridview numeric

我有一个包含以下数据行的列的gridview:

    1
    2a
    2b
    6
    8a
    10a

列的标题有一个sortExpression,所以我可以点击进行排序

如果我对这些数据进行排序,我会按此顺序获取:

    1
    10a
    2a
    2b
    6
    8a

..由于1

,10a行出现了

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

如何从数据源中撤回数据? 请注意,这是在gridview中。

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

CodeProject有一个偶尔使用的。

http://www.codeproject.com/KB/recipes/csnsort.aspx