日期:2014-05-17  浏览次数:20919 次

DATATABLE.DefaultView.Sort对数据表排序,为什么对字母大小写不能正确排序
用DATATABLE.DefaultView.Sort对数据表排序,为什么对字母大小写不能正确排序?
比如:
varchar2
varchar2
VARCHAR2
varchar2
VARCHAR2
varchar2
排序后,大小写不能排在一起。

------解决方案--------------------
忽略大小写了
------解决方案--------------------
我试了下确实不行,那就用linq的排序,自定义排序规则,我写了个参考示例:
		DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Rows.Add("varchar2");
dt.Rows.Add("VARCHAR2");
dt.Rows.Add("zarchar2");
dt.Rows.Add("Varchar3");
dt.Rows.Add("varchar3");
List<DataRow> rows = dt.Rows.Cast<DataRow>().OrderBy(x => x["name"].ToString(), new A<string>()).ToList();
DataTable resultDt = dt.Clone();
rows.ForEach(x => resultDt.ImportRow(x));
GridView1.DataSource = resultDt;
GridView1.DataBind();

public class A<T> : IComparer<T>
{
public int Compare(T x, T y)
{
string s1 = x.ToString();
string s2 = y.ToString();
int minLength = Math.Min(s1.Length, s2.Length);
for (int i = 0; i < minLength; i++)
{
int result = s1[i].CompareTo(s2[i]);
if (result == 0)
continue;
else
return result;
}
if (s1.Length == s2.Length)
return 0;
else
return s1.Length > s2.Length ? 1 : -1;
}
}