那天测试发现,用datatable进行排序,当类型为string时,值为数字时,期望能正确排序,确是根据首个数字进行排序的。
最终解决如下。加一列。
var strorder = order.Replace("asc", "").Replace("desc", "").Trim(); //获取排序的字段
dtList.Columns.Add("SORTCOL", typeof(int)); //添加
foreach (DataRow dr in dtList.Rows)
{
dr["SORTCOL"] = string.IsNullOrEmpty(dr[strorder].ToString()) ? 0 : Convert.ToInt32(dr[strorder].ToString());
}
order = order.Replace(strorder, "SORTCOL ");
dtList.DefaultView.Sort = order;
dtList = dtList.DefaultView.ToTable();
先去取当前的排序字段,order=“A desc”这种,去替换掉,然后增加一列用来排序。去计算这列的长度。最后排序根据sortcol 和原本的排序进行排序。就对了。
应该还有别的更好的方法。比如用linq去用新的orderby排序。等完了在研究一下。。。