对DataTable进行排序不起作用

时间:2012-07-20 07:32:34

标签: c# asp.net visual-studio-2010 sorting datatable

我有一个名为“DTStage”的DataTable。它有两列,如“SeqNbr”和“StageID”。

我想基于“SeqNbr”对数据表进行排序。

DataTable有以下记录:

     SeqNbr         StageID
    --------      -----------
       0               1
       1               2
       2               3
       3               4
       4               5
       5               6
       6               7
       7               8
       8               9
       9               10
       10              11
       11              12
       12              13
       13              14
       14              15
       15              16
       16              17
       18              18
       17              19

我使用了两种方法对这个数据表进行排序,它们如下:

 DTStage = new DataView(DTStage, "", "SeqNbr asc", DataViewRowState.CurrentRows).ToTable();

                     &

 DataView dv = DTStage.DefaultView;
 dv.Sort = DTStage.Columns["SeqNbr"] + " asc";
 DTStage = dv.ToTable();

但两者都给出了如下结果:

     SeqNbr         StageID
    --------      -----------
        0               1
        1               2
       10               11
       11               12
       12               13
       13               14
       14               15
       15               16
       16               17
       17               19
       18               18
        2               3
        3               4
        4               5
        5               6
        6               7
        7               8
        8               9
        9               10

为什么这不能正常工作?如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

看起来您的SeqNbr列是字符串类型,因此它按字符而不是数字排序。如果这些是数字(我假设整数)为什么你不在DataTable中将列类型作为int?

这可以帮助您:Sort string items in a datatable as int using c#

答案 1 :(得分:2)

它是一种自然排序(字符串比较)。你需要告诉dataTable那些是整数。

答案 2 :(得分:1)

请使用DTStage = dv.ToTable();

而不是DTStage = dv.Table;

否则你需要在Sql表

上将列作为数字类型

答案 3 :(得分:0)

您应该将数据表声明为

Datatable DTStage = new Datatable();

DTStage.Columns.Add("SeqNbr", typeof(int));

干杯

答案 4 :(得分:0)

看起来它正在比较字符串。尝试将它们转换为int。