前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DataTable排序结果的纠正

DataTable排序结果的纠正

作者头像
菩提树下的杨过
发布2018-01-24 11:02:04
1.4K0
发布2018-01-24 11:02:04
举报

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-12-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档