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

 

你可能感兴趣的:(Datatable)