1

我有一个名为“DTStage”的数据表。它有两列,例如“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

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

4

5 回答 5

4

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

这应该可以帮助您:使用 c# 将数据表中的字符串项排序为 int

于 2012-07-20T07:37:23.427 回答
2

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

于 2012-07-20T07:38:55.300 回答
1

而不是DTStage = dv.ToTable();请使用DTStage = dv.Table;

否则,您需要将该列作为 Sql Table 上的数字类型进行排序

于 2012-07-20T07:38:29.180 回答
0

您应该将您的数据表定义为

Datatable DTStage = new Datatable();

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

干杯

于 2012-07-20T07:56:40.097 回答
0

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

于 2012-07-20T07:57:27.840 回答