我想使用 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 进行排序。
如果要对行进行排序,请对行进行排序,而不是对行中某一列的值进行排序。当对两个值进行比较时,您进行第一次比较,然后,如果结果为零(即两个值相等),则进行第二次比较。
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;
}
);