zoukankan      html  css  js  c++  java
  • DataTable排序结果的纠正

    默认情况下,即便db中某一列的值是数字,查询出来的DataSet/DataTable里,Column的类型都是String型,所以当用dataTable.DefaultView.Sort ="XXX ASC"排序时,都是按字符串排序处理的,并不是我们想要的结果,下面给出了二种解决办法:

    using System;
    using System.Data;
    
    namespace DataTableSortSample
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Month");
                dt.Rows.Add("1");
                dt.Rows.Add("11");
                dt.Rows.Add("2");
                dt.Rows.Add("12");
                dt.DefaultView.Sort = "Month ASC";
                dt = dt.DefaultView.ToTable();
    
                foreach (DataRow s in dt.Rows)
                {
                    Console.WriteLine(s["Month"]);
                }
                Console.WriteLine("----------------------------------");
    
    
                #region 方法1:将月份补齐为2位 (前提:补齐这种方案并非所有需求都能接受,这个要看该列的业务含义)
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    dt.Rows[i]["Month"] = dt.Rows[i]["Month"].ToString().PadLeft(2, '0');
                }
                dt.DefaultView.Sort = "Month ASC";
    
                dt = dt.DefaultView.ToTable();
    
                foreach (DataRow s in dt.Rows)
                {
                    Console.WriteLine(s["Month"]);
                }
                #endregion
    
                Console.WriteLine("----------------------------------");
    
                #region 方法2:建一个新DataTable,将Month列类型,修改成int型,然后导入数据
                DataTable dtNew = dt.Clone();
                dtNew.Columns["Month"].DataType = typeof (int);//重新指定列类型为int型
                foreach (DataRow s in dt.Rows)
                {
                    dtNew.ImportRow(s);//导入旧数据
                }
    
                dtNew.DefaultView.Sort = "Month ASC";
                dtNew = dtNew.DefaultView.ToTable();
    
                foreach (DataRow s in dtNew.Rows)
                {
                    Console.WriteLine(s["Month"]);
                }
                #endregion
                Console.Read();
    
            }
        }
    }
    

      运行结果:

    1
    11
    12
    2
    ----------------------------------
    01
    02
    11
    12
    ----------------------------------
    1
    2
    11
    12

  • 相关阅读:
    mysql_example
    windows 下 解决 go get 或 dep init 更新不了问题
    golang反射
    Windows下修改hosts并且让他立即生效
    Windows不重启就使环境变量修改生效
    swoole进程-2
    swoole进程
    swoole协程
    区间素数筛法
    AOJ
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/2834541.html
Copyright © 2011-2022 走看看