首页 新闻 会员 周边

dataview的sort对数字进行排序

0
悬赏园豆:30 [已解决问题] 解决于 2010-07-13 12:32

刚在准备面试,遇到个问题,我认为我的程序没错,最后终于找到原因了,就是排序的问题。

假设表格里有若干列,其中的某列全是数字,数字应该是连续的。比如,初始顺序如下:

1,2,3,4,5,6,7,8,9,10,11,12,13,14

第一次点击该列的时候,程序用DESC排序,变为了:

9,8,7,6,5,4,3,2,14,13,12,11,10,1

第二次点击该列,程序用ASC排序,成为了:

1,10,11,12,13,14,2,3,4...

我当前排序用的代码如下:

dataview dv = new dataview(dt);

dv.Sort = SortExpression + " " + sortDirection;

现在想请教一下,dv.Sort有没有办法对某列进行数字进行大小排序呢?

问题补充: 其实,关键的问题就是 DESC和ASC对数字排序的话,它会认为 9,8,7,6,5,4,3,2 大于 15,14,13等两位数,貌似它是直接比较第一位的
码农SeraphWU的主页 码农SeraphWU | 初学一级 | 园豆:155
提问于:2010-07-12 23:50
< >
分享
最佳答案
0

两个思路:

一:

ds.Tables[0].Columns.Add( "iPersonOrderSort ",System.Type.GetType( "System.Int32 "));
ds.Tables[
0].Columns[ "iPersonOrderSort "].Expression = "Convert(iPersonOrder, 'System.Int32 ') ";

DataView dv
= ds.Tables[0].DefaultView;
dv.Sort
= "iPersonOrderSort ";

 

二:
在SQL语句筛选的时候多加一列,用于排序。
例如:

select   Percent   as   strPercent,cast(Percent   as   int)   as   intPercent
from   Table.

那么在DataSet中会自动生成一列intPercent为int的.
在DataView.SortExpression   =   "intPercent ";     //而不是 "strPercent ";

收获园豆:30
邀月 | 高人七级 |园豆:25475 | 2010-07-13 09:02
十分感谢你的回答。我在看你方法二的时候,突然反应过来了,于是去查看了数据库,果然,我试图排序的那列数字其实是varchar(50),sort 当然会以第一位字符的大小来排序了。
码农SeraphWU | 园豆:155 (初学一级) | 2010-07-13 12:31
其他回答(1)
0

你这个排序很怪哦,正排倒排不一样...

Astar | 园豆:40805 (高人七级) | 2010-07-13 08:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册