使用字符串对多列DataTable进行排序。比较

问题描述 投票:0回答:1

我想使用 string.Compare 对 DataTable 的前两列进行排序,因为我需要按匈牙利语言(“hu-HU_technl”)进行排序。 (C#、.NET 2.0)

如果前两列不可能,则第一列就足够了。

我尝试了THIS...正在工作...但使用的是我添加到列表并排序的一列数据表:

        System.Globalization.CultureInfo  ci = System.Globalization.CultureInfo .GetCultureInfo("hu-HU_technl");
        StringComparer comp = System.StringComparer.Create(ci, false);
    
        List<string> fields = new List<string>();
        DataTable dt = GetData();
    
        for (int row = 0; row < dt.Rows.Count; row++)
        {
            fields.Add(dt.Rows[row][0].ToString());
        }

                    fields.Sort(
                            delegate(string p1, string p2)
                            {
                                 return string.Compare(p1,p2,false,ci);//.CompareOrdinal(p1,p2);
                            }
                    );
    
        for (int i = 0; i < fields.Count; i++)
        {
            Console.WriteLine(fields[i].ToString());
        }

https://dotnetfiddle.net/39z2QX

使用 string.Compare 对前两列的多列 DataTable 进行排序。

c# .net vb.net sorting datatable
1个回答
0
投票

如果要对行进行排序,请对行进行排序,而不是对行中某一列的值进行排序。当对两个值进行比较时,您进行第一次比较,然后,如果结果为零(即两个值相等),则进行第二次比较。

List<DataRow> rows = new List<DataRow>();
DataTable dt = GetData();

foreach (DataRow row in dt.Rows)
{
    rows.Add(row);
}

rows.Sort(
        delegate(DataRow r1, DataRow r2)
        {
             int result = string.Compare((string)r1[0], (string)r2[0], false, ci);

             if (result == 0)
             {
                 result = string.Compare((string)r1[1], (string)r2[1], false, ci);
             }

             return result;
        }
);
© www.soinside.com 2019 - 2024. All rights reserved.