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

  • 相关阅读:
    深度学习100问
    BAT机器学习面试1000题系列
    深度学习项目——基于卷积神经网络(CNN)的人脸在线识别系统
    深入理解卷积层
    AI大道理头尾标识
    git-svn Manual Page
    收藏夹
    C语言 #、##、#@在#define中的用法
    ubuntu 编译安装自己的git-svn
    ALSA参考文档
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/2834541.html
Copyright © 2011-2022 走看看