【问题标题】:Sorting the DataTable is not working对数据表进行排序不起作用
【发布时间】:2012-07-19 11:09:18
【问题描述】:

我有一个名为“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

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

【问题讨论】:

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


    【解决方案1】:

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

    这应该对你有帮助:Sort string items in a datatable as int using c#

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案3】:

      请使用DTStage = dv.Table;代替DTStage = dv.ToTable();

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

      【讨论】:

        【解决方案4】:

        你应该把你的数据表作为

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

        干杯

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-22
            • 2021-12-29
            • 1970-01-01
            • 2019-09-07
            相关资源
            最近更新 更多