我想使用string.Compare
对前两列的DataTable
进行排序,因为我需要按匈牙利语("hu-HU_technl"
)进行排序。(C#,.NET 2.0)
如果前两个不可能,第一列就足够了。
我尝试了THIS..
System.Globalization.CultureInfo ci = 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);
}
);
for (int i = 0; i < fields.Count; i++)
{
Console.WriteLine(fields[i].ToString());
}
https://dotnetfiddle.net/39z2QX
使用string.Compare
对前两列的多列DataTable
进行排序。
编辑:代码我试过
//----------------------------------------------Main
OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, conn.ConnectionString);
DataSet ds = new DataSet();
dAdapter.Fill(ds, "Holtak");
DataTable tempTable = ds.Tables[0].Clone();
ds = utils.Settings.DataTableSort(ds, "hu-HU_technl");
ds.Tables[0].Columns.Add(new DataColumn("imageUrl", typeof(byte[])));
//----------------------------------------------utils.Settings.DataTableSort
public static DataSet DataTableSort(DataSet dt, string culture)
{
CultureInfo ci = CultureInfo.GetCultureInfo(culture);
StringComparer comp = System.StringComparer.Create(ci, false);
List<DataRow> rows = new List<DataRow>();
foreach (DataRow row in dt.Tables[0].Rows)
{
rows.Add(row);
}
rows.Sort(
delegate(DataRow r1, DataRow r2)
{
int result = string.Compare((r1[2] == null ? "" : r1[2].ToString()), (r2[2] == null ? "" : r2[2].ToString()), false, ci);
if (result == 0)
{
result = string.Compare((r1[3] == null ? "" : r1[3].ToString()), (r2[3] == null ? "" : r2[3].ToString()), false, ci);
}
return result;
}
);
DataSet dtresult = dt.Clone();
foreach (DataRow dr in rows)
{
dtresult.Tables[0].Rows.Add(dr.ItemArray);
}
return dtresult;
}
2条答案
按热度按时间2w2cym1i1#
如果要对行进行排序,请对行进行排序,而不是对行中某列的值进行排序。当通过两个值进行比较时,您进行第一次比较,然后,如果结果为零(即,这两个值是相等的),你做第二个比较。
svgewumm2#
ADO.NET从第一个.NET版本开始就允许通过DataView进行排序和过滤。语法类似于SQL。您可以按姓氏降序排序,如下所示:
顺便说一下,.NET Framework 2不仅仅是旧的,它是discontinued since 2011。很有可能你的应用程序至少运行在3.5上,因为即使是Windows Vista也有.NET 3.0。目前支持的.NET Framework最旧版本是4.6.2